2014-06-16 3 views
7

나는 TableView을 가지고 있으며 Button의 비활성화 속성을 ObservableList 모델의 크기로 바인드하고 싶습니다. 특히 ObservableList의 크기가 2보다 큰 경우 버튼을 비활성화하고 싶습니다.JavaFX : 버튼의 속성을 ObservableList 크기로 바인딩 해제

어떻게 구현할 수 있습니까?

더 행이 나는

editRoadButton.disableProperty().bind(roadsTable.getSelectionModel().selectedItemProperty().isNull()); 

비슷한 방법이 있나요

을 사용하여 테이블에서 선택되지 않을 때 다른 버튼을 비활성화하려면?

답변

14

과 같은 작업을 수행 할 수 있습니다. 귀하의 경우 f.i .:

button.disableProperty().bind(Bindings.size(items).greaterThan(2)); 
2

당신은 바인딩 클래스에 유용 바인딩 공장 방법이 있습니다 그

ListProperty<String> list = new SimpleListProperty<>(FXCollections.<String>emptyObservableList()); 
Button foo = new Button(); 

foo.disableProperty().bind(new BooleanBinding() { 
    { 
     bind(list); 
    } 

    @Override 
    protected boolean computeValue() { 
     return list.size() > 2; 
    } 
}); 
+0

이것은 효과적인 해결책입니다. – Giorgio

+0

메모리 누출은 어떻게됩니까? 바인딩 해제를해야합니까? 어디에? – Giorgio

+0

Personnaly configure() 메소드에서 내 바인딩을 수행하고 unconfigure() 메소드에서 모든 것을 바인드 해제합니다. 그것은 당신의 프로그램이 어떻게 끝났는지에 달렸지 만 뷰를 다른 뷰로 변경할 때 내 unconfigure가 호출됩니다. listner를 추가하는 경우와 동일합니다. listner를 제거해야합니다. –