gpt4 book ai didi

java - 动态更新 jTable

转载 作者:行者123 更新时间:2023-11-30 09:05:11 25 4
gpt4 key购买 nike

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

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 继承的。

感谢任何帮助。

--------编辑--------
如果我之前不是更清楚,请原谅我,但问题是我想更新整个数据集。甚至列名以及列数和行数也会发生变化。
例如,在上面的代码中我可以做到这一点,而且它仍然会如您所期望的那样工作。

//Get new values
columnNames = new String[]{"Country", "Location", "Latitudes"};
data = new Object[][]{ {"John", "Blue", "1"}, {"Oliver", "Green", "4"}};
//Update table

最佳答案

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

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(),并确保正确跟踪行数。最常见的错误之一是在添加数据后忘记增加行数,并认为表模型没有接收数据。

关于java - 动态更新 jTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24918884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com