我有两个使用相同TableModel类的不同对象构建的JTable。当我单击表1中的一列进行排序时,要求是另一个表2也应该根据JTable 1中单击的相同列进行排序。有没有办法找到表1中使用的列或者排序是基于。使用它,有没有办法通过表2中针对同一列的任何方法调用来调用排序。
请提供您对任何java apis的建议或指示。此外,如果有任何链接有一个例子将有很大的帮助。 -Paul。
答案 0 :(得分:8)
要做的就是听取表格分拣机的更改,并将第二个表格的sortKeys设置为相同:
RowSorterListener l = new RowSorterListener() {
@Override
public void sorterChanged(RowSorterEvent e) {
if (RowSorterEvent.Type.SORT_ORDER_CHANGED == e.getType()) {
RowSorter sorter = e.getSource();
otherTable.getRowSorter().setSortKeys(sorter.getSortKeys());
}
}
};
table.getRowSorter().addRowSorterListener(l);
如果您需要保持同步两种方式,请将侦听器注册到两者并添加一些逻辑,以便在侦听器触发排序更改时不执行任何操作。
修改强>
在写了几乎相同的评论两次之后(对于建议在模型上进行排序的答案),决定在这里添加答案 1 :(得分:1)
我认为用户界面只会使问题复杂化。根据基础表数据来考虑它,你会更好。如果你能做到这一点,那就很简单了。
对一组值进行排序并不困难。您可以使用java.util.Collections
和Comparable
来执行此操作。
诀窍是维护已排序列的索引与行中其余列之间的关联。
答案 2 :(得分:0)
最简单的方法是对基础数据进行排序。或者,您可以实现sortlistener并将其添加到两个表中。
以下主题显示了如何在JXTable中实现它: