【发布时间】:2020-01-16 17:49:24
【问题描述】:
我正在用 JTable 和一个 MySQL 数据库编写代码,并将一个表从数据库加载到 JTable 中。我也做了按钮列,这个按钮删除它所在的行。按下后行消失,但在数据库中删除了错误的行。
当我尝试删除最后一行时,我得到了这个异常:
线程“AWT-EventQueue-0”中的异常 java.lang.ArrayIndexOutOfBoundsException: 8 >= 8.
这里是 ActionListener 方法:
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int row = table.convertRowIndexToModel(table.getEditingRow());
model.removeRow(row);
System.out.print(row);
deleteOrder.removeFromDB(table.getModel().getValueAt(row, 0).toString());//table.getValueAt(row, column).toString());//?????????
fireEditingStopped();
}
});
这是其他类的方法,这里我将值加载到JTable
private static void loadOrdersTable() throws SQLException {
String[][]data = new String[takeOrder.countOrder()][5];
String[] columnNames = {"Order ID", "Table ID","Name","Price","Delete Button"};
data = takeOrder.getOrder();
DefaultTableModel model = new DefaultTableModel(data, columnNames);
table = new JTable( model );
table.getColumnModel().getColumn(4).setCellRenderer(new ButtonTableRenderer());
table.getColumnModel().getColumn(4).setCellEditor(new ButtonTableEditor(new JTextField(),table, model));
}
这是我从 DB(TakeOrder 类)中选择值的方法:
public String[][] getOrder() throws SQLException {
int i = 0;
String data[][] = new String[countOrder()][5];
String query = "SELECT order_id, table_id, dish_name, dish_price FROM orders";
try {
statement = makeConnection.getConnection().createStatement();
resultSet = statement.executeQuery(query);
while(resultSet.next()) {
String orderId = resultSet.getString(1);
String restTableId = resultSet.getString(2);
String name = resultSet.getString(3);
int price = resultSet.getInt(4);
data[i][0] = orderId;
data[i][1] = restTableId;
data[i][2] = name;
data[i][3] = String.valueOf(price);
data[i][4] = "Delete";
i++;
}
System.out.print("Ilość: " + i);
} catch(Exception e) {
System.out.print("getOrder(String tableId) error " + e.getMessage());
}
return data;
}
你知道问题出在哪里吗?
【问题讨论】:
-
问题可能出在 StackTrace 所说的位置...