2016-08-17 2 views
0

JavaFX SortedList에 기본 두 번째 정렬을 추가하는 좋은 방법이 있습니까? 내가하고 싶은 일은 사용자가 기본값에 따라 열 머리글을 클릭 할 수 있지만 주먹 열을 선택하지 않은 경우 첫 번째 열의 값을 타이 브레이커로 사용할 수 있습니다. 나는 여전히 TableView comparatorProperty에 바인딩하는 동안이 작업을 수행하는 것을 선호합니다.두 값에 JavaFX SortedList 정렬

내가 아래에 무언가 같이 구현의 생각 :

SortedList<MyObj> sortedData = new SortedList<>(myFilteredList); 
sortedData.comparatorProperty().bind(myTableView.comparatorProperty()/*.thenComparing(otherComparator) or something like this*/); 

이런의 TableView의 읽기 전용 comparatorProperty의 상단에 결합 할 수있는 방법이 있나요? 더 좋은 방법이 있습니까?

+0

'TableView' 이미 Shift' 당신이 차 종류를 추가 할 수 있습니다'잡고 여러 columns.By에 의해 정렬 지원, 참조 : 다음은 간단한 방법 ['TableView.getSortOrder()'] (https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TableView.html#getSortOrder--) – fabian

+0

사실입니다. 이 추가 단계없이 내 사용자의 기본 타이 브레이커를 만들 수 있습니다. – Agricola

답변

0

이것은 다소 거추장 스럽지만, 당신이 찾고있는 것을 어느 정도 수행하는 것처럼 보입니다. 요점은 정렬 된 목록을 사용하고 헤더를 클릭 할 수 있도록하는 경우 정렬 된 목록의 비교자를 표의 비교 자로 바인딩해야한다는 것입니다.

그래서 가장 좋은 방법은 테이블에 정의 된 정렬 순서를 수정하는 것입니다.

TableColumn<S,T> defaultSortColumn = ... ; 
sortedList.comparatorProperty().bind(table.comparatorProperty()); 

// Added an extra '>' for syntax 
table.getSortOrder().addListener((Change<? extends TableColumn<S,?>> c) -> { 
    if (table.getSortOrder().size() != 2 || table.getSortOrder().get(1) != defaultSortColumn) { 
     table.getSortOrder().setAll(table.getSortOrder().get(0), defaultSortColumn); 
    } 
}); 

(. 물론 적절한 유형으로 ST 교체)

+0

이것은 컴파일되고 실행되었지만 열 머리글이 응답하지 않게되었습니다. 명시 적으로 수정해야합니까? – Agricola

+0

@Agricola 업데이트보기 ... 그게 당신이 찾고있는 것이라면 확실하지 않지만 시작을 줄 수도 있습니다. 약간의 해킹을 느낀다. –