需要绑定相当于String.replaceAll(...)

时间:2015-04-27 11:37:19

标签: java javafx

我需要创建一个绑定,允许我使用绑定等效String.replaceAll(...)。我有一个字符串," $ {driver}驾驶$ {name}",我希望将键," $ {driver}"等替换为特定的属性。我还希望返回的属性能够添加侦听器,以便在driverProperty或其他更改时,返回的属性值将更改,而不必重新调用getString()。

public String getString(Derby derby) {
        String ret;
        if (driverProperty.get().equals("") && nameProperty.get().equals("") && numberProperty.get().equals("") && groupProperty.get().equals("")) {
            ret = "[blank]";
        } else {
            ret = (String) derby.getSettings().get("general.cardisplay").getValue();
            ret = ret.replace("${driver}", driverProperty.get());
            ret = ret.replace("${name}", nameProperty.get());
            ret = ret.replace("${number}", numberProperty.get());
            ret = ret.replace("${group}", groupProperty.get());
        }
        return ret;
    }

1 个答案:

答案 0 :(得分:1)

使用Bindings.createStringBinding()。这需要一个提供String的函数和一个要观察的值列表;如果这些值中的任何一个更改,则绑定被标记为无效。

我的问题对我来说不太清楚,但我认为你可以做点什么

StringBinding formattedString = Bindings.createStringBinding(
    () -> getString(derby), 
    derby.settingsProperty(), 
    nameProperty, numberProperty, 
    driverProperty, groupProperty);

现在你可以做像

这样的事情
formattedString.addListener((obs, oldFormattedString, newFormattedString) -> {
    // invoked any time the formatted string changes...
});

Label label = new Label();
label.textProperty().bind(formattedString);