2013-06-25 9 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を持つソリューションが初期値に問題があるあなたが何か

ような
StringProperty prop = new SimpleStringProperty(); 
StringProperty other = new SimpleStringProperty(); 

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

をすれば...

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

あなたの財産は、あなたが

をしたいプレフィックスと結合されます
+0

アゴニスト_ありがとうございます!あなたは素晴らしい!これは私が望んでいたものです!できます! ChangeListenerがなくても簡単です。 –

+0

問題はありません、JavaFXバインディングは本当に強力です。 –

関連する問題