要填充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();
答案 0 :(得分:3)
我将新数据包括在内,分配数组数据
嗯,你不能这样做,因为这将创建一个新的TableModel,它将重置分拣机。
因此,假设您使用的是DefaultTableModel,基本逻辑应为:
model.setRowCount(0); // to delete the rows
for (each row of data in the Array)
model.addRow(...);
现在只删除数据并将其添加到模型中,以便分拣机保留。
另一个选项是在重新创建TableModel之前保存分拣机的状态。您可以从DefaultRowSorter获取当前排序键。所以基本的逻辑是:
有关此方法的示例,请参阅:Trying to get the sorter positon to retain after a table refresh。