Java 如何在添加新条目后刷新JTable

Java 如何在添加新条目后刷新JTable,java,swing,jtable,Java,Swing,Jtable,我从数据结构列表中填充了一个JTable。我还有一个按钮“创建新字段”,用于在列表中创建新条目。我可以将新条目添加到列表,但是我不知道在添加新条目后如何刷新JTable。您必须使用tableModel.fireTableDataChanged()。或者如果表中只更新了很小的一部分(即一个单元格):tableModel.fireTableCellUpdated(x,y) 根据注释,您需要编写自己的小型TableModel 源自AbstractTableModel 将列表传递给表mdoel的构造函

我从数据结构
列表中填充了一个
JTable
。我还有一个按钮“创建新字段”,用于在列表中创建新条目。我可以将新条目添加到
列表
,但是我不知道在添加新条目后如何刷新
JTable

您必须使用
tableModel.fireTableDataChanged()
。或者如果表中只更新了很小的一部分(即一个单元格):
tableModel.fireTableCellUpdated(x,y)

根据注释,您需要编写自己的小型
TableModel

  • 源自
    AbstractTableModel
  • 将列表传递给表mdoel的构造函数
  • 相应地实施所需的方法
  • getRowCount返回
    list.size()
  • getColumnCount返回1
  • getValueAt返回列表项(行)
  • 使用该表模型而不是DefaultTableModel
  • 如果更新了列表,请使用
    fireTableDataChanged()

  • 使用观察者模式


    您的表模型应该是列表的观察者。因此,当您列出数据更改时,表格将被更新。

    1.我创建了一个新项目,选择了一个新框架,并将表格、标签、文本字段和按钮从swing控件拖动到您的框架中

    2.在后端创建一个表

    3.从此链接下载rs2xml jar文件

    将其添加到项目库中

    4.然后连接MySQL

    5.然后使用以下代码创建更新函数类型

    rs=statement.executeQuery("select * from details");
    jTable1.setModel(DbUtils.resultSetToTableModel(rs));
    
    6.在按钮操作事件中,键入以下内容并调用更新功能

    Object name=jTextField1.getText();
    String sql="insert into details (name) values('"+name+"')";
    int  resultset=statement.executeUpdate(sql);
    
    您可以按照本教程进行操作:---


    我编写了这段代码,但它不起作用:tableModel=new DefaultTableModel(数据、列名);table=新的JTable(tableModel);addNewFieldToData();tableModel.fireTableDataChanged();好的,看起来您没有将数据添加到表模型中,而是添加到您的
    列表中。我想这不是最好的办法。您可以使用observer模式(这里没有太多帮助),也可以在每次列表更改后从列表中重新填充表模型。最好将数据添加到表格模型,而不是
    列表
    ,或者编写您自己的表格模型。您能提供一个简短的草图吗?在这种情况下,最好如上所述编写您自己的小表格模型。然后,您只需将数据添加到列表中,并相应地使用fire*()-方法。@klausklausos
    观察者模式
    此解决方案是一种观察者模式,如果您使用默认表模型,则只需使用
    addRow
    方法,这将通知侦听器。如果使用
    AbstractTableModel
    的实现,那么如果插入行,则必须使用
    fireTableRowsUpdated
    如果仅更改单元格fireTableCellUpdated`等等。。有关更多信息,您使用的是自定义的
    TableModel
    实现还是默认的
    DefaultTableModel
    ?@Klausos-Klausos这种性质的问题经常被问到,默认情况下是关闭的主题,在这里搜索是否有问题这不是很有用。。列表没有实现任何类型的
    观察者模式
    ,因此必须创建一个包含列表的包装器类。。换句话说,这就是
    tableModel