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