gpt4 book ai didi

java - 数据改变后重新加载 JTable 的 Object[][]

转载 作者:行者123 更新时间:2023-11-29 03:15:19 25 4
gpt4 key购买 nike

我想知道当最初用于填充表格的 Object[][] 发生变化时是否可以刷新表格的 GUI。

Object[][] calculationsTableData;
public Interface() {
...
analysisPanel.add(calculationsTable());
...
}

JScrollPane calculationsTable() {
populateCalculationsTableData();
...
calculationsTable = new JTable(calculationsTableData, calculationsColumnNames);
...
}

void populateCalculationsTableData(){
Object[][] temp = new Object[x.numsSize][7];
for (int i = 0; i < x.numsSize; i++) {
temp[i][0] = df.format(x.nums[i]);
...
}
calculationsTableData = temp;
}

populateCalculationsTableData() 在 x 对象更改为重新填充 calculationsTableData 时调用

repaint()revalidate() 方法在这种情况下似乎无效,fireTableDataChanged() 也无效,因为这是不是表格模型。

最佳答案

默认 JTable创建 DefaultTableModel 的新实例 AbstractTableModel [1] 未明确设置表模型时的实现。如果表格需要更新,您必须使用它的模型。

你可以...

设置一个新的 DefaultTableModel :

void populateCalculationsTableData() {
...
calculationsTableData = temp;
TableModel model = new DefaultTableModel(calculationsTableData, calculationsColumnNames);
calculationsTable.setModel(model);
}

或者你可以...

使用 DefaultTableModel 创建表:

TableModel model = new DefaultTableModel(calculationsTableData, calculationsColumnNames);
calculationsTable = new JTable(model);

将表模型转换为 DefaultTableModel 并像这样设置它的数据和列:

void populateCalculationsTableData() {
...
calculationsTableData = temp;
DefaultTableModel model = (DefaultTableModel)calculationsTable.getModel();
model.setDataVector(calculationsTableData, calculationsColumnNames);
}

推荐读物


[1]:在检查了 JTable(Object[][] rowData, Object[] columnNames) 源代码后我意识到了没有创建 DefaultTableModel,而是创建了一个从 AbstractTableModel 扩展的新匿名内部类。

关于java - 数据改变后重新加载 JTable 的 Object[][],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27062840/

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