2013-06-25 2 views
8

JavaFX의 바인드 기능에 대한 질문이 있습니다. 내가 원하는 건 2 문자열 속성을 바인딩하는 것입니다. 그러나 그들의 가치는 평등해서는 안됩니다.JavaFX : 상수 문자열 접두어로 문자열 속성 바인딩

의 나에게 예를 만들자 : 내 응용 프로그램의 마지막 열려있는 프로젝트를 나타냅니다와

나는 StringProperty 있습니다.
값은 "C : \ temp \ myProject.prj"와 같습니다.
내 창 제목에이 경로를 표시하고 싶습니다. stage.titleProperty().bind(lastprojectProperty());
하지만 난 단지 프로젝트 경로뿐만 아니라 응용 프로그램 이름,
예컨대 : 에서는 MyApplication 2.2.4 보여주고 싶지 않아 - C :
그것은 쉽게 \ 임시 \의 myProject.prj합니다.

바인딩을 사용하고 상수 문자열을 추가 할 수 있습니까? 또는 ChangeListerner를 사용합니까?

ChangeListener로부터와 솔루션은 초기 값으로 문제가

...

final StringProperty path = new SimpleStringProperty("untitled"); 
    final StringProperty title = new SimpleStringProperty("App 2.0.0"); 

    path.addListener(new ChangeListener<String>() 
    { 
     @Override 
     public void changed(ObservableValue<? extends String> ov, String t, String newValue) 
     { 
      title.setValue("App 2.0.0 - " + newValue); 
     } 
    });     

    // My title shows "App 2.0.0" since there is now change event throws until now... 
    // Of course I could call path.setValue("untitled"); 
    // And above path = new SimpleStringProperty(""); 
    System.out.println(title.getValue()); 

    // Now the title is correct: "App 2.0.0 - C:\temp\myProject.prj" 
    path.setValue("C:\\temp\\myProject.prj"); 
    System.out.println(title.getValue()); 

답변

18

당신이 할 경우 그 이 속성은 접두사로 결합됩니다

당신이

을 원하는
StringProperty prop = new SimpleStringProperty(); 
StringProperty other = new SimpleStringProperty(); 

prop.bind(Bindings.concat("your prefix").concat(other)); 

같은
+0

고맙습니다. 고맙습니다. 너 멋지다! 이것은 제가 원했던 것입니다 !!! 그것은 작동합니다! ChangeListener없이 훨씬 쉽습니다. –

+0

문제 없음, JavaFX 바인딩은 정말 강력합니다. 원하는 모든 것을 할 수 있습니다. –