java - 刷新 jtable 的内容

标签 java mysql jtable jpanel

我在 JTabbedPaneJPanel(称为 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/

相关文章:

java - 使用 BufferedReader 读取 Java 中的一行

mysql - 如何在 Linux mint 系统中为 MariaDB 10.1.21 版数据库设置环境变量

java - 如何在 Java 中选择标题时选择 JTable 列

java - 如何将数据插入动态定义列的swing表(来自mysql数据库的数据)?

java - Mockito 方法行为

java - 如何在Spring Data MongoDB中实现聚合查询?

java - 如何使用 mongo Java 驱动程序 3.0+ 检查集合中是否存在文档

mysql - Sqoop 与 TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT 的兼容性

mysql - 如何使用 join 和 group by 为同一列检索具有不同计算值的 sql 结果?

java - Netbeans 中的结果集到 Jtable