每当我查询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和编程很新。对不起,如果代码很乱,问题不清楚。如果它有用,我可以提供所有代码。我删除了原始代码中的大多数方法和其他类,以使问题更清晰。
答案 0 :(得分:1)
tableScrollPane.add(DBTable);
JScrollPane isn't designated as container,您必须将子项添加到JViewport
有两个选项
a)tableScrollPane = new JScrollPane(myTable);
b)tableScrollPane.setViewportView(myTable);
DefaultTableModel dbTable = new DefaultTableModel();
将此局部变量(即生成)重命名为dbTableModel而不是dbTable
你必须创建一个JTables视图,f.e。两个基本选项
a)JTable myTable = new JTable(dbTableModel)
b)myTable.setModel(dbTableModel)
dbTable.fireTableDataChanged()
在DefaultTableModel中正确实现,没有理由调用此方法,也不在模型定义之外(class,void,返回XxxTableModel的接口)
链接Oracle教程中的更多信息,...也适用于SSCCE / MCVE表格中的工作代码示例
按
刷新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();
}
.
.
.
}
希望这会有所帮助, 祝你好运。