刷新java Jtable以显示更新的数据

时间:2015-06-24 09:53:00

标签: java swing user-interface jtable

每当我查询mysql数据库时,我都试图刷新UI中显示的Jtable。这个想法是显示在UI JTable中更新的任何新数据。

UI类位于下方。

public class DBView {

private JFrame frame = new JFrame();    

private JScrollPane tableScrollPane = new JScrollPane();
private DefaultTableModel dbTable = new DefaultTableModel(); 


public void setDbTable(DefaultTableModel dbTable) {
    this.dbTable = dbTable;
    //this.dbTable.repaint();
    paintDBTable();

}

public DefaultTableModel getDbTable() {
    return dbTable;
}
public DBView() {
    initializeFrame();
    paintDBTable();

}

private void paintDBTable() {


    tableScrollPane.setBounds(20, 350, 400, 80);
    frame.getContentPane().add(tableScrollPane);
    JTable DBTable = new JTable(dbTable);
    tableScrollPane.add(DBTable);
    DBTable.setFillsViewportHeight(true);
    tableScrollPane.setViewportView(DBTable);

 }

/**
 * Initialize the contents of the frame.
 */
private void initializeFrame() {
    frame.setVisible(true);
    frame.setBounds(100, 100, 451, 525);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);
    frame.setTitle("MySQL Database");
}

从另一个Model类我调用setDbTable()方法。我将一个新的Jtable对象输入到setDbTable()方法,并将数据从数据库输入读入新的Jtable对象。

问题出在setDbTable()方法中,我再次使用paintDBTable()方法。

我尝试使用dbTable.fireTableDataChanged()方法刷新视图,没有用。

现在的方式,它正在发挥作用。但是使用setDbTable()方法进行刷新似乎是一种非常低效的方法。

问题是,您是否看到我可以使用另一种定义用于刷新Jtables的方法?

P.S。我对java和编程很新。对不起,如果代码很乱,问题不清楚。如果它有用,我可以提供所有代码。我删除了原始代码中的大多数方法和其他类,以使问题更清晰。

2 个答案:

答案 0 :(得分:1)

  1. tableScrollPane.add(DBTable);

  2. DefaultTableModel dbTable = new DefaultTableModel();

    • DefaultTableModel is model,其中包含JTable
    • 的演示文稿图层的值
    • 将此局部变量(即生成)重命名为dbTableModel而不是dbTable

    • 你必须创建一个JTables视图,f.e。两个基本选项

      a)JTable myTable = new JTable(dbTableModel)

      b)myTable.setModel(dbTableModel)

  3. dbTable.fireTableDataChanged()在DefaultTableModel中正确实现,没有理由调用此方法,也不在模型定义之外(class,void,返回XxxTableModel的接口)

  4. 链接Oracle教程中的更多信息,...也适用于SSCCE / MCVE表格中的工作代码示例

  5. 刷新JTable的数据
    • 删除dbTableModel.setRowsCount(0);中的所有行,然后将新行添加到dbTableModel.addXxx

    • 重新创建dbTableModel,然后必须将注释添加回JTable,例如myTable.setModel(dbTableModel)

答案 1 :(得分:0)

在此之后刷新JTable数据并刷新UI并不是那么令人困惑,因为:

Swing组件以非常出色的方式实现了MVC和Observer。这意味着无论何时更改TableModel中的数据,都会根据需要通知和重新绘制UI。

因此,您应该以保持JTable变量而不是类中的TableModel变量的方式更改代码。之后在setDbTable中调用JTable的setModel方法,这意味着:

public class DBView {

    private JTable jtable = new JTable(); 

    public void setDbTable(DefaultTableModel dbTable) {
        this.jtable.setModel(dbTable);
        //this.dbTable.repaint(); 
        //paintDBTable();
    }
    .
    .
    .
}

希望这会有所帮助, 祝你好运。