需要相当于 String.replaceAll(...) 的绑定
Need bindings equivalent of String.replaceAll(...)
我需要创建一个绑定,使我能够执行与 String.replaceAll(...)
相同的操作,但需要使用绑定。我有一个字符串“${driver} driving ${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;
}
使用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);
我需要创建一个绑定,使我能够执行与 String.replaceAll(...)
相同的操作,但需要使用绑定。我有一个字符串“${driver} driving ${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;
}
使用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);