2013-06-25 50 views
8

我對JavaFX中的綁定功能有疑問。我想要的是綁定2個字符串屬性。但是他們的價值觀不應該是平等的。JavaFX:使用常量字符串前綴綁定StringProperty

讓我們做我舉一個例子:

我有一個StringProperty與代表我的應用程序的最後一個打開的項目。
該值類似於「C:\ temp \ myProject.prj」。
我想在窗口的標題中顯示此路徑。
這很容易:stage.titleProperty().bind(lastprojectProperty());
但我不希望只顯示該項目的路徑,而且應用程序的名稱,
例如: - MyApplication的2.2.4 - C:\ TEMP \ 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

agonist_非常感謝!你很棒!這是我想要的exactyl !!!有用!沒有ChangeListener就容易多了。 –

+0

沒問題,JavaFX綁定真的很強大,你可以做所有你想要的東西 –