gpt4 book ai didi

java - 如何在不更改使用 setAutoCreateRowSorter 完成的排序的情况下刷新表 (JTable)?

转载 作者:行者123 更新时间:2023-11-30 08:03:32 24 4
gpt4 key购买 nike

为了填充 JTable,我使用了 AbstractTableModel。我还提供了使用 setAutoCreateRowSorter 进行排序的机会。所有这些操作都插入到一个定时器进程中,该进程在 1 分钟后执行数据刷新。如何每次刷新数据时不改变排序?

谢谢

//... Type of **data** is a Matrix -> data[][]
//... Type of **columnName** is an Array -> columnName[]
//... Type of **table** is a JTable
//... Type of **model** is an AbstractTableModel
//...Other code Before
try {
table.setAutoCreateRowSorter(true);
} catch(Exception continuewithNoSort) { }
//...Other code After

Timer timerToRefresh = new Timer(0, new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
//Method that populates the matrix
popolateTable(nList);
} catch (Exception e1) {
e1.printStackTrace();
}
// Popolate the model
model = new DefaultTableModel(data,columnName){
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int row, int column) {
return false;
}
};
// set the model to the table
table.setModel(model);
}
});

timerToRefresh.setDelay(60000); // Refresh every 60 seconds
timerToRefresh.start();

最佳答案

I take the new data to be included assigning the array data,

你不能那样做,因为这会创建一个新的 TableModel,它会重置排序器。

因此,假设您使用的是 DefaultTableModel,基本逻辑应该是:

model.setRowCount(0); // to delete the rows

for (each row of data in the Array)
model.addRow(...);

现在只有数据会被删除并添加到模型中,因此排序器将保留。

另一个选项是在重新创建 TableModel 之前保存排序器的状态。您可以从 DefaultRowSorter 获取当前排序键。所以基本逻辑是:

  1. getSortKeys()
  2. 刷新表模型
  3. setSortKeys(...)

有关此方法的示例,请参阅:Trying to get the sorter positon to retain after a table refresh

关于java - 如何在不更改使用 setAutoCreateRowSorter 完成的排序的情况下刷新表 (JTable)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36218593/

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