【问题标题】:Refreshing contents of a jtable刷新 jtable 的内容
【发布时间】:2012-06-13 14:52:48
【问题描述】:

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

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

【问题讨论】:

    标签: java mysql jtable jpanel


    【解决方案1】:

    你是对的 - 你不需要重新构造 JPanel。实际上,您甚至不需要重构JTable,甚至可能甚至不需要重构TableModel。 (另外,您可能想阅读一些有关 Model-View-Controller 设计模式的信息)

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

    table.tableChanged(new TableModelEvent(tableModel));
    

    或者,如果您觉得最好用新数据构造一个新的TableModel

    table.setModel(newTableModel);
    

    这是 JTable 中的 SSCCE 由其他东西更新...我已经用来自 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);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-04
      • 2015-09-06
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多