문제

나는 모두 같은 열을 가진 많은 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/는 다른 데이터를 비교하기 위해 테이블을 다르게 정렬하기를 원할 수도 있습니다.

대신,보기 메뉴에 "정렬 별"옵션을 추가하십시오. 이 옵션을 변경하면 모든 테이블을 정렬하지만 사용자가 특정 테이블을 정렬하지 않는 한 내버려 두십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top