我需要创建一个绑定,允许我使用绑定等效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;
}
答案 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);