JavaFX技巧11:更新只读属性

自定义控件通常具有“只读”属性。 这意味着不能从控件外部进行设置,甚至不能从自己的皮肤类别进行设置。 通常,控件的行为会导致更改只读属性。 在JavaFX中,可以在控件本身和皮肤中实现此行为。 因此,有时我们最终希望通过皮肤来更新控件的只读属性。 如何才能做到这一点?

后门:物业地图

解决方案非常简单:将控件的属性映射用作控件类的后门。 属性映射是可观察到的,因此,如果外观在映射中设置一个值,则将通知控件并可以更新只读属性本身的值。

控制类

控件类中的属性可以这样定义:

private final ReadOnlyDoubleWrapper myReadOnly =
   new ReadOnlyDoubleWrapper();

public final ReadOnlyDoubleProperty myReadOnlyProperty() {
    return myReadOnly.getReadOnlyProperty();
}

public final Double getMyReadOnly() {
    return myReadOnly.get();
}

为了更新属性,控制类使用其自己的属性映射注册一个侦听器,并侦听对名为“ myReadOnly”的属性的更改:

getProperties().addListener(new MapChangeListener() {
  public void onChanged(Change c) {
    if (c.wasAdded() && "myReadOnly".equals(c.getKey())) {
      if (c.getValueAdded() instanceof Number) {
        myReadOnly.set((Double) c.getValueAdded());
      }
      getProperties().remove("myReadOnly");
    }
  }
});

重要说明:请确保对属性键使用唯一的名称,否则可能会导致命名冲突。 优良作法是在名称前面加上控件的程序包名称,例如com.myframework.myReadOnly。

皮肤课

现在,外观类可以通过在控件的属性映射中设置属性值来更新属性:

getSkinnable().getProperties().put("myReadOnly", 42);

翻译自: https://www.javacodegeeks.com/2014/07/javafx-tip-11-updating-read-only-properties.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值