我正在使用JTable和MySQL数据库编写代码,并将一个表从数据库加载到JTable中。我还制作了按钮列,此按钮删除了它所在的行。按下后,该行消失,但在数据库中删除了错误的行。
此外,当我尝试删除最后一行时,我会遇到以下异常:
线程“AWT-EventQueue-0”中出现异常Java . lang . arrayindexoutofboundsexception: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;
}
你知道问题出在哪里吗?
当我尝试删除最后一行时,会出现以下异常:
int row = table.convertRowIndexToModel(table.getEditingRow());
model.removeRow(row);
System.out.print(row);
deleteOrder.removeFromDB(table.getModel().getValueAt(row, 0).toString());
是的,您已经从TableModel中删除了最后一行。
因此,您不能使用 getValueAt(...) 方法再次访问该行。
你需要重新整理你的逻辑。类似于:
String valueFromTable = model.getValueAt(row, 0).toString();
model.removeRow(row);
deleteOrder.removeFromDB( valueFromTable );
我制作了一个JTable,其中填充了数据库中的数据。它从textfields中获取数据并将其添加到表和数据库中。问题是我有一个删除按钮,我让它从表本身删除选定的行(使用defaultTableModel),但它不会从实际的数据库中删除该数据。当我再次运行该程序时,删除的行再次出现在JTable中。 这可能会变得混乱,但希望有人能找出我错过了什么。帮助将会很感激,但不要,我的时间很少,不能完全大修我
我的Jtable有一个listSelectionListener: 我创建了一个按钮来删除带有事件的Jtable的所有行: 如果我在没有选择任何行的情况下按下按钮,则不会出现错误,但当我选择一行,然后按下按钮时,会出现以下错误: 当表没有ListSseltionListener时,不会发生这种情况。我哪里错了? 提前感谢您的帮助。
我想从java中的表中删除选定的行。该事件应在单击按钮时执行。如果有人帮助我,我会非常感激。。。 例如,有一个名为sub\U table的表,有3列,即sub\U id、sub\U name、class。当我从该表中选择一行并单击“删除”按钮时,应删除该特定行。。
我不确定是什么导致了这个例外。
我需要从ListView中永久删除一个项目,然后从数据库中删除。我有一个DatabaseHandler.java类,它的delete函数为: 注意,函数deleteContact具有contact类型的contact变量。
下面的代码是我的按钮操作的一部分。Jtable contain last row is复选框。单击“保存”按钮时,所选行必须从表行中删除 执行的操作代码