2013-06-25 19 views
8

Mam pytanie do funkcji wiązania w JavaFX. To, czego chcę, to powiązanie 2 właściwości łańcuchów. Ale ich wartości nie powinny być równe.JavaFX: Bind StringProperty ze stałym ciągiem prefiksowym

Zróbmy mi przykład:

Mam StringProperty z reprezentuje ostatni otwarty projekt w mojej aplikacji.
Wartość jest jak "C: \ temp \ myProject.prj".
Chcę pokazać tę ścieżkę w tytule mojego okna.
To proste: stage.titleProperty().bind(lastprojectProperty());
Ale nie chcę, aby pokazać tylko ścieżkę projektu, ale także nazwę aplikacji,
np .: MyApplication 2.2.4 - C: \ Temp \ myProject.prj.

Możliwe jest użycie wiązania i dodanie stałego ciągu prefiksu? Czy mogę użyć ChangeListerner?

Rozwiązanie z ChangeListener ma problemu z początkowych wartości ...

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()); 

Odpowiedz

18

Jeśli zrobisz coś takiego

StringProperty prop = new SimpleStringProperty(); 
StringProperty other = new SimpleStringProperty(); 

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

nieruchomość będzie wiązać się z prefiksu chcesz

+0

agonista_ dziękuję bardzo! Jesteś świetny! To jest exactyl co chciałem !!! To działa! Znacznie łatwiej bez ChangeListener. –

+0

Bez problemów, powiązania JavaFX są naprawdę potężne, możesz zrobić prawdopodobnie wszystko czego potrzebujesz –