很抱歉,问题看起来很简单,但我对Java绑定感到困惑。
我需要将标签的textProperty绑定到对象的SimpleIntegerProperty,但是作为条件检查的结果。
SimpleIntegerProperty可以是0,1,2,3,4,5,6,并且根据值,可以为textProperty分配字符串值。
喜欢:
SimpleIntegerProperty is 0 -> textProperty displays "State 0"
SimpleIntegerProperty is 1 -> textProperty displays "State 1"
SimpleIntegerProperty is 2 -> textProperty displays "State 2"
等...
我尝试用Bindings.createStringBinding来做,但它不允许在其中使用“if”语句。
感谢您的帮助。
答案 0 :(得分:2)
当然createStringBinding
允许使用if
或类似的结构。您只需将其包含在{}
括号内并使用return
,以防您使用lambda表达式:
IntegerProperty property = ...
StringProperty target = ...
target.bind(Bindings.createStringBinding(() -> {
switch (property.get()) {
case 0:
return "State 0";
case 1:
return "State 1";
case 2:
return "State 2";
case 3:
return "State 3";
case 4:
return "State 4";
case 5:
return "State 5";
case 6:
return "State 6";
default:
return "";
}
}, property));
或者如果模式总是"State "+value
IntegerProperty property = ...
StringProperty target = ...
target.bind(Bindings.createStringBinding(() -> {
int value = property.get();
return (value >= 0 && value <= 6) ? "State "+value : "";
}, property));
答案 1 :(得分:1)
您可以使用IntegerBinding.asString(String format)
:
IntegerProperty value = ... ;
Label label = new Label();
label.textProperty().bind(value.asString("State %d"));