javafx属性_JavaFX技巧11:更新只读属性

javafx属性

自定义控件通常具有“只读”属性。 这意味着不能从控件外部进行设置,甚至不能从自己的皮肤类别进行设置。 通常,控件的行为会导致更改只读属性。 在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

javafx属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaFX 属性是一种特殊的字段,可以在属性值发生变化时自动更新视图。JavaFX 属性有以下几个特点: 1. 可观察性:JavaFX 属性是可观察的,可以注册监听器来监听属性值的变化。 2. 绑定性:JavaFX 属性可以绑定到其他属性或表达式上,当被绑定的属性或表达式的值发生变化时,绑定属性的值也会随之变化。 3. 可写性:JavaFX 属性可以是可写的或只读的,可写属性的值可以通过 set 方法来修改,只读属性的值只能在创建时指定,之后不可修改。 4. 类型安全:JavaFX 属性具有类型安全性,因为属性的类型是在编译时确定的。 以下是一个简单的 JavaFX 属性示例: ``` import javafx.beans.property.*; public class Person { private StringProperty name = new SimpleStringProperty(); private IntegerProperty age = new SimpleIntegerProperty(); public String getName() { return name.get(); } public void setName(String name) { this.name.set(name); } public StringProperty nameProperty() { return name; } public int getAge() { return age.get(); } public void setAge(int age) { this.age.set(age); } public IntegerProperty ageProperty() { return age; } } ``` 在上面的示例中,Person 类具有两个 JavaFX 属性:name 和 age。name 属性是一个字符串属性,age 属性是一个整数属性。这些属性都具有 get 和 set 方法,以及对应的属性对象(nameProperty 和 ageProperty)。可以使用属性对象来注册监听器、绑定属性和获取属性值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值