すべて同じ列(ただしデータが異なる)を持つJXTableがいくつかあります。いずれかの列のヘッダーの1つをクリックすると、データを並べ替えることができます。私が今欲しいのは、テーブルの1つのヘッダーをクリックすると、他のテーブルが同じようにソートされることです。
1161 次
2 に答える
4
JTable
それぞれを参照RowSorter
し、それ自体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 に答える