Properties JavaFX:使用常量字符串前缀绑定StringProperty

Properties JavaFX:使用常量字符串前缀绑定StringProperty,properties,javafx,bind,changelistener,Properties,Javafx,Bind,Changelistener,我对JavaFX中的绑定功能有一个问题。我想要的是绑定两个字符串属性。但它们的价值不应该相等 让我们举个例子: 我有一个StringProperty,表示应用程序中最后打开的项目。 该值类似于“C:\temp\myProject.prj”。 我想在我的窗口标题中显示此路径。 很简单:stage.titleProperty().bind(lastprojectProperty()) 但我不想只显示项目路径,还想显示应用程序名称, 例如。: MyApplication 2.2.4-C:\temp\m

我对JavaFX中的绑定功能有一个问题。我想要的是绑定两个字符串属性。但它们的价值不应该相等

让我们举个例子:

我有一个StringProperty,表示应用程序中最后打开的项目。
该值类似于“C:\temp\myProject.prj”。
我想在我的窗口标题中显示此路径。
很简单:
stage.titleProperty().bind(lastprojectProperty())
但我不想只显示项目路径,还想显示应用程序名称,
例如。: MyApplication 2.2.4-C:\temp\myProject.prj

可以使用绑定并添加常量前缀字符串吗?或者我需要使用变更列表器吗

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());
final StringProperty路径=新的SimpleStringProperty(“无标题”);
最终StringProperty标题=新SimpleStringProperty(“App 2.0.0”);
addListener(新的ChangeListener()
{
@凌驾

如果你这样做的话,public void会改变(observeValue)

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

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

您的属性将使用您想要的前缀绑定

agnitor\uu非常感谢!您太棒了!这正是我想要的!!!它可以工作!没有ChangeListener更容易。没问题,JavaFX绑定功能非常强大,您可能可以做任何您想要的绑定。concat有vargs。所以您可以做:
prop.bind(Bindings.concat(“您的前缀”,其他));