jxtable과 같은 방식으로 비슷한 테이블을 정렬하고 정렬합니다.
문제
나는 모두 같은 열을 가진 많은 jxtables가 있습니다 (그러나 다른 데이터). 열 중 하나의 헤더를 클릭하여 데이터를 정렬 할 수 있습니다. 내가 지금 원하는 것은 테이블 중 하나의 헤더를 클릭 할 때 다른 테이블이 동일한 방식으로 정렬된다는 것입니다.
해결책
각각을 참조하는 중재자 클래스를 정의 할 수 있습니다 JTable
'에스 RowSorter
그리고 자체를 a로 등록합니다 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);
}
}
}
}
다른 팁
사용자로부터 제어 할 수 있기 때문에 그렇게하지 않을 것입니다. S/는 다른 데이터를 비교하기 위해 테이블을 다르게 정렬하기를 원할 수도 있습니다.
대신,보기 메뉴에 "정렬 별"옵션을 추가하십시오. 이 옵션을 변경하면 모든 테이블을 정렬하지만 사용자가 특정 테이블을 정렬하지 않는 한 내버려 두십시오.
제휴하지 않습니다 StackOverflow