java.lang.ArrayIndexOutOfBoundsException:21>;=21
我收到下面的错误消息java.lang.ArrayIndexOutOfBoundsException:21>;=21,java,swing,jtable,defaulttablemodel,Java,Swing,Jtable,Defaulttablemodel,我收到下面的错误消息 java.lang.ArrayIndexOutOfBoundsException: 21 >= 21 at java.util.Vector.elementAt(Vector.java:427) at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277) at com.vanuston.medeil.ui
java.lang.ArrayIndexOutOfBoundsException: 21 >= 21
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
at com.vanuston.medeil.uitables.PurchaseTable.createTable(PurchaseTable.java:182)
at com.vanuston.medeil.ui.Purchase.applyDefaults$(Purchase.fx:130)
在下面代码的第三行
jTable.removeColumn(jTable.getColumnModel().getColumn(19));
jTable.removeColumn(jTable.getColumnModel().getColumn(20));
jTable.removeColumn(jTable.getColumnModel().getColumn(21));
jTable.removeColumn(jTable.getColumnModel().getColumn(22));
我已经在DefaultTableModel
中添加了第21列和第22列
Vector cols = new Vector();
Vector data = new Vector();
int len = colName.length;
System.out.println("col length " + len);
for (int i = 0; i < initRow; i++) {
Vector c = new Vector();
for (int j = 0; j < len; j++) {
if (j == 19 && j == 20) {
c.addElement(Boolean.FALSE);
} else {
c.addElement(null);
}
}
data.addElement(c);
}
for (int n = 0; n < len; n++) {
cols.addElement(colName[n]);
System.out.println(colName[n]);
}
try {
jTable.setModel(new javax.swing.table.DefaultTableModel(data, cols) {
Class[] type = types;
boolean[] canEditCol = canEditCols;
@Override
public Class getColumnClass(int columnIndex) {
return type[columnIndex];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEditCol[columnIndex];
}
});
Vector cols=new Vector();
向量数据=新向量();
int len=colName.length;
系统输出打印项次(“列长度”+len);
for(int i=0;i
但是我不知道,显示ArrayIndexOutOfBounds
异常的原因是什么。您调用了,列数组中的每一列都被重新索引。例如,当删除元素0时,位于索引1的元素现在在索引0处重新索引
您需要以相反的顺序删除这些列,以便不会发生这种重新索引:
jTable.removeColumn(jTable.getColumnModel().getColumn(22));
jTable.removeColumn(jTable.getColumnModel().getColumn(21));
jTable.removeColumn(jTable.getColumnModel().getColumn(20));
jTable.removeColumn(jTable.getColumnModel().getColumn(19));
您也可以拨打以下线路4次:
jTable.removeColumn(jTable.getColumnModel().getColumn(19));
因为在每次调用i
时,列19+i
将成为列19。您调用时,列数组的每一列都将重新编制索引。例如,当删除元素0时,索引1处的元素现在将在索引0处重新编制索引
您需要以相反的顺序删除这些列,以便不会发生这种重新索引:
jTable.removeColumn(jTable.getColumnModel().getColumn(22));
jTable.removeColumn(jTable.getColumnModel().getColumn(21));
jTable.removeColumn(jTable.getColumnModel().getColumn(20));
jTable.removeColumn(jTable.getColumnModel().getColumn(19));
您也可以拨打以下线路4次:
jTable.removeColumn(jTable.getColumnModel().getColumn(19));
因为每次调用
i
,列19+i
将成为列19。在运行该行之前,您可以打印该模型的大小吗?您正在删除每行上的列,因此我猜它们正在重新索引。int len=colName.length;sysout(len)
output 23按相反顺序删除它们。@Tunaki那么我如何删除这4列?通过循环?在运行该行之前,您可以打印该模型的大小吗?您正在删除每行上的列,因此我猜它们正在重新编制索引。int len=colName.length;sysout(len);
output 23以相反的顺序删除它们。@Tunaki那么我如何删除这4个列?通过循环?加上一个,但是XxxTableModel总是返回所有…,列只从JTables视图中删除,原因是(您必须注意操作)将索引从视图转换为模型:-),有两种方法行(排序、筛选)和列(列是重新排序的或仅从视图中删除)加上一,但XxxTableModel始终返回全部…,列仅从JTables视图中删除,原因(您必须注意操作)将索引从视图转换为模型:-),有两种方法行(排序、筛选)和列(列是重新排序的或仅从视图中删除)