我有一个JTable
in a JPanel
(称为cur_panel
) a JTabbedPane
,它正在从 MySQL 数据库中获取内容。现在,我希望能够在使用其他窗格中的选项进行更改时刷新表格JTabbedPane
。我通过销毁cur_panel
然后再次构建它来解决这个问题,以便它可以从数据库中获取刷新的数据。
有人可以建议我一个更好的方法来解决它吗?就像我只能获取新的/修改的数据并且没有破坏然后重建JPanel
.
你是对的 - 你不应该需要重新构建JPanel
. JTable
实际上,您甚至不需要重建TableModel
. (另外,您可能想阅读一些有关模型-视图-控制器设计模式的信息)
相反,您应该重置TableModel
. 我认为这应该导致JTable
重新粉刷。如果没有,您可以致电:
table.tableChanged(new TableModelEvent(tableModel));
或者,如果您觉得TableModel
使用新数据构建新数据更好:
table.setModel(newTableModel);
这是由其他东西更新的 a的SSCCE ...我已经用来自 a 的输入替换了数据库连接,但它应该给你一个想法: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);
}
}