首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态更新jTable

动态更新jTable
EN

Stack Overflow用户
提问于 2014-07-24 03:07:17
回答 2查看 8.8K关注 0票数 2

我的表会在运行时更改整个数据集。我当前的代码如下所示:

代码语言:javascript
复制
public class gui_test_form extends JFrame{
    private JPanel rootpanel;
    private JTable testTable;
    private JScrollPane testScrollPane;
    private JButton testButton;

    private String[] columnNames = {"Name", "Color"};
    private Object[][] data = { {"John", "Blue"}, {"Oliver", "Green"}, {"Paul", "Red"} };

    public gui_test_form() {
        super("GUI TEST");
        setContentPane(rootpanel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);

        testButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) { // Button Clicked
                //Get new values
                data[0][0] = "New Value";
                //Update table
                testTable.setModel(new DefaultTableModel(data, columnNames));
            }
        });
    }
}

代码按照我的预期工作。但我不认为每次都创建一个新的DefaultTableModel是最好的方法。我应该做些什么?

我简要地研究了AbstractTableModelfireTableChanged()方法,但无法使其正常工作。因为DefaultTableModel是从AbstractTableModel继承而来的,所以我希望它可以工作。

任何帮助都是非常感谢的。

-编辑

请原谅我之前没有说得更清楚,但问题是我想要更新整个数据集。甚至列名、列数和行数也会发生变化。

例如,在上面的代码中,我可以做到这一点,它仍然可以像您预期的那样工作。

代码语言:javascript
复制
//Get new values
columnNames = new String[]{"Country", "Location", "Latitudes"};
data = new Object[][]{ {"John", "Blue", "1"}, {"Oliver", "Green", "4"}};
//Update table
EN

回答 2

Stack Overflow用户

发布于 2014-07-24 03:13:54

您应该在创建JTable的同一级别声明单个表模型,并根据需要对该表模型进行更改,而不是在事件处理程序中声明它。

代码语言:javascript
复制
private JPanel rootpanel;
private JTable testTable;
private DefaultTableModel tableModel;
private JScrollPane testScrollPane;
private JButton testButton;

tableModel = new DefaultTableModel();
testTable = new JTable(tableModel);

看一看Java Tutorial。请注意监听表数据更改的部分

如果您提出了自己的表模型,则需要确保完全实现所有被覆盖的方法,特别是setValueAt(),并确保正确跟踪行数。最常见的错误之一是在添加数据后忘记增加行数,并认为表模型没有接收数据。

票数 2
EN

Stack Overflow用户

发布于 2019-06-08 19:17:07

在你想要更新模型的地方添加下面的代码。

代码语言:javascript
复制
model.addRow(new Object[]{txt_title.getText(), txt_name.getText()});

在此之前,还必须全局预定义模型和表。

代码语言:javascript
复制
DefaultTableModel model = new DefaultTableModel();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24918884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档