Swing 同时对两个jtable进行排序
我有两个JTable,它们是用同一个TableModel类的不同对象构建的。当我单击表1中的一列进行排序时,要求另一个表2也应根据在JTTable 1中单击的同一列进行排序。是否有任何方法可以找到表1中使用的列或排序依据的列。使用它,是否有任何方法可以通过对表2的任何方法调用来调用同一列的排序 请提供您的建议或指向任何JavaAPI的指针。此外,如果有任何链接,有一个例子将是非常有帮助的。Swing 同时对两个jtable进行排序,swing,sorting,jtable,Swing,Sorting,Jtable,我有两个JTable,它们是用同一个TableModel类的不同对象构建的。当我单击表1中的一列进行排序时,要求另一个表2也应根据在JTTable 1中单击的同一列进行排序。是否有任何方法可以找到表1中使用的列或排序依据的列。使用它,是否有任何方法可以通过对表2的任何方法调用来调用同一列的排序 请提供您的建议或指向任何JavaAPI的指针。此外,如果有任何链接,有一个例子将是非常有帮助的。 -Paul.我认为用户界面只会使问题复杂化。从底层表数据的角度考虑一下,您的表现会更好。如果你能做到这一点
-Paul.我认为用户界面只会使问题复杂化。从底层表数据的角度考虑一下,您的表现会更好。如果你能做到这一点,那就是一个简单的展示问题 对一组值进行排序并不困难。您可以使用
java.util.Collections
和Comparable
来实现这一点
诀窍是保持已排序列的索引与行中其他列之间的关联。最简单的方法是对基础数据进行排序。或者可以实现一个sortlistener并将其添加到两个表中 以下线程显示了如何在JXTable中实现它:
方法是倾听表格分拣器的变化,并将第二张表格的分拣键设置为相同:
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);
如果需要以两种方式保持同步,请将侦听器同时注册到这两种方式,并添加一些逻辑,以便在侦听器触发排序更改时不执行任何操作
编辑
在写了两次几乎相同的评论后(针对建议对模型进行排序的答案),决定将其添加到这里
- 从技术上讲,排序可以由模型或视图领域负责。无论哪种方式,都有(过去激烈辩论过的)利弊。一旦完成,在ui-dev中的任何地方都要坚持这个决定
- 不管怎样,保持模型和视图坐标系之间的索引映射都是挑战所在
- Swing/X决定将其视为一种视图责任,将任何基于模型的自定义排序/同步塞进顶部都会与系统发生冲突