2017-12-10 1 views
-1

javafx.scene.text.TextStringProperty에 바인딩되어야하는 ObjectProperty 인스턴스로 사용자 지정 개체를 보유하고 있습니다.JavaFX 8 : 사용자 지정 개체의 속성 바인딩

제가 명백한 일을하고 text.textProperty().bind(..);을 사용하면 Text은 실제로 내용을 표시합니다 (나는 toString의 결과를 믿습니다).

하지만 String을 수정해야합니다. 실제로는 에 표시됩니다.

실제로 바인딩에 제공되는 값을 수정할 수 있습니까? I이 간단한 테스트 프로그램을 생성 제 anwer 다음

== EDIT ==

은 : I '는 바 "로, 두 번째 기대 반면

import javafx.beans.binding.Bindings; 
import javafx.beans.property.ObjectProperty; 
import javafx.beans.property.SimpleObjectProperty; 
import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.property.StringProperty; 


public class BindingsTest { 
    public static void main(String... args) { 
     final ObjectProperty<Foo> foo = new SimpleObjectProperty<>(); 
     foo.set(Foo.FOO); 

     final StringProperty textProperty = new SimpleStringProperty(); 
     textProperty.bind(Bindings.createStringBinding(() -> foo.get().name().toLowerCase())); 

     System.out.println(textProperty.get()); 

     foo.set(Foo.BAR); 

     System.out.println(textProperty.get()); 

    } 

    private enum Foo { 
     FOO, BAR 
    } 
} 

두 출력은'갑 '을 아르 . 그래서 아마 Bindings.createStringBinding(..) 이후 내가 무엇을 찾고있는 것이 아닌가요?

+0

답변에서 수행되는 방식으로 시도해보십시오. 나는. 'foo'를'createStringBinding()'의 두 번째 인자로 지정 하시겠습니까? –

+0

@James_D 오, 나는 그것을 보지 못했다.이 람다는 여전히 나를 혼란스럽게 만든다. 나는 해결책을 올바르게 재현했다는 것을 알았 기 때문에 나는 그것을 여기에 올렸다 :-) – Hannes

+0

당신은 의존성으로'foo'를 지정하지 않았습니다. 'Bindings.createStringBinding()'은 스스로를 무효화 할 때를 알기 위해서'foo'의 변경을 관찰 할 필요가 있습니다. – Jai

답변

1

당신은 Bindings.createStringBinding()을 찾고 있습니다.

final ObjectProperty<CustomObject> objProperty; 
text.textProperty.bind(Bindings.createStringBinding(() -> { 
    final CustomObject value = objProperty.getValue(); 
    return value != null ? value.toString().toUpperCase() : ""; 
}, objProperty)); 
+0

나는 그것이 내가 찾고있는 것이 아니라고 믿는다; 나는 내 질문을 수정했다. – Hannes

관련 문제