ユーザが選択したJTableから複数の行を削除しようとしています。このコードでは、行の1行を除いて行が削除され、ArrayOutOfBoundsExceptionがスローされます。以下は、削除ボタンのコードです。JTableからの行の削除 - Java
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;
}
};
のためのStackTrace
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'のコードを表示してください – SomeDude
私たちにスタックトレースを教えてもらえますか? – TMichelsen
SOの答えの1つは、 'removeRow(rows [i] -i);' –