我有许多 JXTable,它们都有相同的列(但数据不同)。您可以通过单击其中一列的标题对数据进行排序。我现在想要的是,单击其中一个表的标题时,其他表的排序方式相同。
问问题
1161 次
2 回答
4
您可以定义一个调解器类,该类引用每个JTable
'sRowSorter
并将其自身注册为RowSorterListener
每个排序器。当给定的排序器发生更改时,您可以使用 检索其当前排序键列表,getSortKets()
并将它们传递给每个其他排序器使用setSortKeys(List<? extends SortKey>)
.
例子
首先我们定义中介类:
public class SortMediator implements RowSorterListener {
private final List<RowSorter> sorters;
private boolean changing;
public void addRowSorter(RowSorter sorter) {
this.sorters.add(sorter);
}
public void sorterChanged(RowSorterEvent e) {
...
}
}
现在我们实现sorterChanged(RowSorterEvent e)
响应给定的排序器事件:
public void sorterChanged(RowSorterEvent e) {
// The changing flag prevents an infinite loop after responding to the inital
// sort event.
if (!changing) {
changing = true;
RowSorter changedSorter = e.getSource();
List<? extends SortKey> keys = changedSorter.getKeys();
for (RowSorter sorter : sorters) {
if (sorter != changedSorter) {
// Install new sort keys, which will cause the sorter to re-sort.
// The changing flag will prevent the mediator from reacting to this.
sorter.setSortKeys(keys);
}
}
}
}
于 2010-01-14T14:37:16.380 回答
0
我不会那样做,因为它会夺走用户的控制权:他/她可能希望对表格进行不同的排序,以比较不同的数据。
相反,在“查看”菜单中添加“排序依据”选项。更改此选项将对所有表进行排序,但除非用户想要对特定表进行排序,否则不要理会它们。
于 2010-01-14T14:40:20.463 回答