【发布时间】:2016-11-28 18:24:50
【问题描述】:
我正在尝试从用户选择的 JTable 中删除多行。代码工作并删除除一行之外的行,此时它会引发 ArrayOutOfBoundsException。以下是删除按钮的代码。
public void mouseClicked(MouseEvent e) {
int[] rows = dataTable.getSelectedRows();
if(rows.length == 0){
JOptionPane.showMessageDialog(null, "No records are selected");
}else if(JOptionPane.showConfirmDialog(null, "Are you sure you want to permanently delete " +
rows.length + " selected record(s)") == 0){
for(int i = 0; i < rows.length; i++){
System.out.println("Value at " + rows[i] + ": " + dataModel.getValueAt(rows[i], 0));
}
for(int i = 0; i < rows.length; i++){
System.out.println("Current Row ("+ i +"): " + rows[i]);
dataModel.removeRow(rows[i]); // Throws error
}
dataTable.revalidate();
dataTable.repaint();
}
}
数据模型代码
dataModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
堆栈跟踪
java.lang.ArrayIndexOutOfBoundsException: 3 >= 2
at java.util.Vector.removeElementAt(Vector.java:558)
at javax.swing.table.DefaultTableModel.removeRow(DefaultTableModel.java:462)
at com.company.fitness.DataPanel$4.mouseClicked(DataPanel.java:213)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
【问题讨论】:
-
请显示
dataModel的代码 -
你能告诉我们堆栈跟踪吗?
-
其中一个 SO 答案建议使用
removeRow(rows[i]-i);
标签: java swing jtable indexoutofboundsexception