Java JTable不使用fireTableDataChanged()刷新
我有一个带有Java JTable不使用fireTableDataChanged()刷新,java,jtable,listener,defaulttablemodel,Java,Jtable,Listener,Defaulttablemodel,我有一个带有DefaultTableModel的JTable。每当单击JTable时,我都想刷新JTable。下面是我使用modelTarget.fireTableDataChanged()的代码刷新JTable。 但在执行单击操作时,JTable中显示的值不会更改 初始化组件并将值插入表: final TestClass test = new TestClass(); String sql = "SELECT * FROM student"; Resul
DefaultTableModel
的JTable
。每当单击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});
}
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
}
});
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});
}
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表所做的更改。那么,有什么方法可以“刷新”或“更新”表模型吗
EDIT:我写了一个方法,清空当前模型中的所有行,并根据更新的数据库重新添加所有行,从而让它现在可以工作了。我根本没有使用
fireTableDataChanged()
。人类历史上有人设法让fireTableDataChanged()工作吗?在哪里更新数据?你如何更新它?我看到getValueAt,test.stmt.executeUpdate,但没有设置…据我所知,您只是启动了一些SQL,甚至不关心它返回的数据。因为你从来没有读过你得到的数据,所以你的表没有update@Ordous我在这个监听器之外启动了所有swing组件,因此当框架打开时,表中确实会填充SQL数据库中的值,但是在将行添加到表模型之后,我如何重新添加(更新)当有更改时,它们会自动更新吗?@Constructor I在侦听器外部更新表。你要我给你看那些密码吗?是的,那太好了。