我在 JTabbedPane
的 JPanel
(称为 cur_panel
)中有一个 JTable
,它正在从中获取内容一个 MySQL 数据库。现在,我希望能够在使用 JTabbedPane
的其他 Pane 中的选项进行更改时刷新表格。我通过销毁 cur_panel
然后再次构造它来解决这个问题,以便它可以从数据库中获取刷新的数据。
有人可以建议我更好的解决方法吗?就像我可以只获取新的/修改过的数据而不破坏然后重建 JPanel
。
最佳答案
您是对的 - 您不需要重新构造 JPanel
。实际上,您甚至不需要重建 JTable
,甚至可能不需要重建 TableModel
。 (此外,您可能想阅读一些有关模型- View - Controller 设计模式的文章)
相反,您应该重置 TableModel
中的数据。我认为这应该会导致重绘 JTable
。如果没有,您可以调用:
table.tableChanged(new TableModelEvent(tableModel));
或者,如果您觉得用新数据构建一个新的 TableModel
更好:
table.setModel(newTableModel);
这是一个 SSCCE由其他东西更新的 JTable
的...我已经用 JTextField
的输入替换了数据库连接,但它应该给你的想法:
public class TableTest {
public static void main(String[] args) {
JFrame frame = new JFrame("Table Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTextField text = new JTextField("Editable Text");
final TableModel model = new DefaultTableModel(new String[]{"Text"},1);
model.setValueAt(text.getText(), 0, 0);
text.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
model.setValueAt(text.getText(), 0, 0);
}
});
JTable table = new JTable(model);
JPanel panel = new JPanel(new BorderLayout());
panel.add(text, BorderLayout.NORTH);
panel.add(new JScrollPane(table), BorderLayout.SOUTH);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
}
关于java - 刷新 jtable 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10967600/