刷新jtable的内容

时间:2012-06-10 09:21:50

标签: java mysql jtable jpanel

我在JTable JPanelcur_panel)中有一个JTabbedPane,它从MySQL数据库中获取内容。现在,我希望能够在使用JTabbedPane的其他窗格中的选项进行更改时刷新表格。我通过销毁cur_panel然后再次构造它来解决这个问题,以便它可以从数据库中获取刷新的数据。

有人可以建议我更好地绕过它吗?就像我只能获取新的/修改过的数据并且没有破坏然后重建JPanel一样。

1 个答案:

答案 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}}