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在侦听器外部更新表。你要我给你看那些密码吗?是的,那太好了。