将textProperty绑定到表达式

时间:2016-12-23 13:28:21

标签: javafx binding

很抱歉,问题看起来很简单,但我对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”语句。

感谢您的帮助。

2 个答案:

答案 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"));