您面临的问题与删除行时更新表模型的方式有关。目前,您的deleteSelectedRow 按钮操作侦听器会更新数据库中的数据,但不会触发表模型刷新。这就是为什么表仍然显示已删除的行。
要解决此问题,您需要显式通知表模型数据已更改。每当从数据库中删除一行时,您可以通过调用 TableModel 接口的 fireTableRowsDeleted() 方法来完成此操作。这将触发表模型更新其内部数据结构并刷新表。
这是代码的更新版本,其中包括必要的更改:
delete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int rowIndex = table.getSelectedRow(); Object columnIndexValue = table.getModel().getValueAt(rowIndex, 0); String columnName = table.getModel().getColumnName(0); String query = "delete from world.city" + " where " + columnName + "=" + columnIndexValue; try { PreparedStatement pre = conn.prepareStatement(query); pre.executeUpdate(); JOptionPane.showMessageDialog(null, "Row Deleted Successfully"); // Notify the table model that the data has changed ((TableModel) table.getModel()).fireTableRowsDeleted(rowIndex, rowIndex); } catch (Exception e1) { JOptionPane.showMessageDialog(null, e1.getMessage()); } } });
通过调用 fireTableRowsDeleted() ,您指示表模型从其内部数据结构中删除指定的行并相应地更新表。这将确保 GUI 反映对底层数据库所做的更改。
以上是为什么从数据库中删除行后我的 JTable 没有更新?的详细内容。更多信息请关注PHP中文网其他相关文章!