我有JTable
DefaultTableModel
。我想点击JTable时刷新JTable。以下是使用modelTarget.fireTableDataChanged();
刷新JTable
的代码。
但是,当执行点击操作时,JTable中显示的值不会改变。
初始化组件并将值插入表格:
final TestClass test = new TestClass();
String sql = "SELECT * FROM student";
ResultSet rs = test.stmt.executeQuery(sql);
JTable table = new JTable();
DefaultTableModel model = new DefaultTableModel(0, 0);
String header[] = new String[] { "ID", "Name"};
model.setColumnIdentifiers(header);
table.setModel(model); //set model into table object
while (rs.next())
{
int id = rs.getInt("id");
String name = rs.getString("name");
//Add rows into table
model.addRow(new Object[] { id, name});
}
JTable听众:
table.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e) {
String sql = "UPDATE student " + "SET name='Alice' " + "WHERE id=7";
JTable target = (JTable)e.getSource();
int row = target.getSelectedRow();
try{test.stmt.executeUpdate(sql);}
catch(SQLException err){System.out.println("SQL Error!");};
System.out.println(target.getModel().getValueAt(row, 0)); //get row value
DefaultTableModel modelTarget = (DefaultTableModel) target.getModel();
modelTarget.fireTableDataChanged(); //JTable did not refresh with this code
}
});
Que:在使用.fireTableDataChanged()
之前,是否需要对表模型执行任何其他操作?如果没有,我还能做些什么让JTable
刷新?
编辑:我怀疑表模型没有收到我对sql表所做的更改。那么有什么办法可以“刷新”或“更新”表格模型吗?
编辑:我设法通过编写一个方法清空当前模型中的所有行并根据更新的数据库重新添加所有行来让它工作。我根本没有使用fireTableDataChanged()
。人类历史上的任何人都设法让fireTableDataChanged()
工作?