1

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

有人可以建议我一个更好的方法来解决它吗?就像我只能获取新的/修改的数据并且没有破坏然后重建JPanel.

4

1 回答 1

2

你是对的 - 你不应该需要重新构建JPanel. JTable实际上,您甚至不需要重建TableModel. (另外,您可能想阅读一些有关模型-视图-控制器设计模式的信息)

相反,您应该重置TableModel. 我认为这应该导致JTable重新粉刷。如果没有,您可以致电:

table.tableChanged(new TableModelEvent(tableModel));

或者,如果您觉得TableModel使用新数据构建新数据更好:

table.setModel(newTableModel);

这是由其他东西更新的 a的SSCCE ...我已经用来自 a 的输入替换了数据库连接,但它应该给你一个想法:JTableJTextField

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);
  }
}
于 2012-06-10T13:01:54.820 回答