【问题标题】:JavaFX binding a BooleanProperty to PaintJavaFX 将 BooleanProperty 绑定到 Paint
【发布时间】:2015-04-16 10:47:50
【问题描述】:

我正在编写一个代码,它可以从其他代码的一部分中获取一些布尔值,并相应地更改屏幕上某些圆圈的颜色。但是,我在尝试将布尔值绑定到颜色时遇到了问题。我最终得到了这个:

unit1.getNeuron().getWorkingProperty().addListener(new ChangeListener<Boolean>() {

        @Override
        public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
            if (newValue == Boolean.FALSE) {
                controller.paint1 = new ObservableValueBase<Paint>() {

                    @Override
                    public Paint getValue() {
                        return Color.RED;
                    }
                };
            } else {
                controller.paint1 = new ObservableValueBase<Paint>() {

                    @Override
                    public Paint getValue() {
                        return Color.DODGERBLUE;
                    }
                };

            }
        }
    });
  • 但是对于我使用的 n 个变量,我必须重复 n 次。有其他方法可以实现吗?

【问题讨论】:

  • 使用根据布尔值状态返回颜色的绑定(相对于在更改时创建和设置新的 Observable)顺便说一句,几乎不需要扩展 ObservableXXBase - 如果您坚持手动更改侦听器中的颜色,使用 SimpleXXProperty设置 它的值

标签: binding javafx-8


【解决方案1】:

假设您想创建一个ObservableObjectValue&lt;Paint&gt;,并根据ObservableBooleanValue 进行切换,那么Bindings 就是您的朋友:

final ObservableBooleanValue booleanCondition = unit1.getNeuron().getWorkingProperty();
final ObservableObjectValue<Paint> paintProperty = Bindings.when(booleanCondition).then(Color.RED).otherwise(Color.DODGERBLUE);

【讨论】:

  • 你真的应该解释你的代码。 unit1.getNeuron().getWorkingProperty() 是什么?代码是做什么的。如果你不把这段代码放在一个问题中而不解释它,你也不应该在答案中。
猜你喜欢
  • 2019-06-04
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2017-04-11
  • 2019-01-18
相关资源
最近更新 更多