2014-10-28 2 views
1

JavaFx에서 응용 프로그램을 만들고 있습니다. 지금은 서로 옆에 두 tableviews 있습니다JavaFX : 다른 TableView를 기반으로 TableView에서 여러 행을 사용하지 않습니다.

------------------------------------------------------------------------------ 
| TableView 1      | TableView 2       | 
|         |          | 
|         | Entry 1        | 
|         | Entry 2        | 
|         | Entry 3        | 
|         | Entry ...       | 
|         | Entry N        | 
------------------------------------------------------------------------------ 
내가있는 TableView 1의 TableView 2에서 항목을 복사하고 싶지만, 동시에있는 TableView이 필요에서 복사 된 항목이 비활성화

(setDisable 또는 유사한 것과 함께 행을 비활성화하십시오). 하나의 tableview에서 다른 tableview로 항목을 복사하는 방법을 알고 있습니다. 문제는 하나 또는 여러 개의 항목이 다음과 같이 내가 RowFactory와 함께이 시도의 TableView 1. 에 복사 된 때 여러 행을 해제하는 방법을 모르는 것입니다 :

productsInTransaction.setRowFactory(tv -> { 
     TableRow<Product> row = new TableRow<>(); 
     row.disableProperty().bind(???); 
     return row; 
}); 

어떤 도움이 많이 감사합니다!

답변

1

난 당신이 원하는하고있는 논리 꽤 잘 모르겠지만, 당신의 행 공장은 표 1에 연결되어있는 경우, 아이템이 표 2에있을 때 당신은 행을 해제하는, 수행

row.disableProperty().bind(Bindings.createBooleanBinding(() -> 
    table2.getItems().contains(row.getItem()), table2.getItems(), row.itemProperty())); 
+0

감사합니다. 이것은 올바른 해결책 인 것처럼 보이지만 엔트리 (엔트리는 내 경우에는)를 속성 중 하나와 비교하려고합니다. 예를 들어 Name과 Age를 속성으로 갖는 Person 객체를 포함하는 TableView가있는 경우 Name (고유)을 기반으로 행을 비활성화하려고합니다. 어떻게해야합니까? –

+1

이 시점에서 나의 주식 응답은 "[EasyBind 프레임 워크 사용] (https://github.com/TomasMikula/EasyBind)"입니다. 당신은'ObservableList names = EasyBind.map (table2.getItems(), Person :: getName);'을 호출 할 수 있고 바인딩은'createBooleanBinding (() -> names.contains (row.getItem(). getName)), names, row.itemProperty())' –

+0

빠르고 더러운 방법은 이름을 비교하기 위해'Person' 클래스에서'equals (...) '를 오버라이드하는 것입니다. 물론 응용 프로그램의 나머지 부분에 대해 'equals (...)'에 대해 다른 의미가 필요할 수 있습니다. –

관련 문제