javafx 教程_JavaFX技巧5:可观察

javafx 教程

javafx 教程

即使在整个NSA监视的这段时间,在实现JavaFX控件时也要牢记可观察性,这仍然是一个好主意。 与Swing相比,这在JavaFX中很容易实现。

旧时光

来自Swing,我习惯于花费大量精力和时间来使自定义控件变得可观察。 通常需要添加方法来添加和删除某种类型的侦听器。 此侦听器类型是一个新接口,该接口的单个​​方法接受了一个新的事件对象。 要发送此事件对象,控件必须在我的自定义控件中“触发”它,因此我最终编写了fireXYZ()方法。 要做很多工作只是为了让别人知道控件状态的某些方面已经改变。

新时代

在JavaFX中,通过使用属性和可观察的集合可以更轻松地实现可观察性。 在FlexGanttFX框架中,其控件的几乎每个属性都是属性,并且所有集合都是通过FXCollections类创建的,该类返回可观察的集合。 这很有意义,因为每个控件的属性总数定义了它的状态,并且该状态必须是可观察的,以便应用程序的其他部分(尤其是其他控件)可以对状态更改做出React。

样板代码

使用属性的不利之处在于,您最终编写了许多样板代码,但仍然比Swing少。 如果是布尔型属性,它将如下所示:

public final BooleanProperty showStuff =
     new SimpleBooleanProperty(this, "showStuff", true);

public final BooleanProperty showStuffProperty() {
   return showStuff;
}

public final boolean isShowStuff() {
   return showStuff.get();
}

public final void setShowStuff(boolean show) {
   showStuff.set(show);
}

是的,您应该完全遵循此编码约定。 对于名为xxx的属性,请提供名为xxxProperty()的属性访问器方法,名为setXXX()的设置器和名为getXXX()的获取器。 这是在JavaFX中使用它的方式,您应该坚持使用它。

使用集合时,通常至少会得到以下代码:

private final ObservableList<String> names =
     FXCollections.observableArrayList();

public final ObservableList<String> getNames() {
   return names;
}

在JavaFX核心控件中,集合通常存储在一个属性中,以便可以用新集合替换整个集合。 到目前为止,我在控件中还没有真正看到对此的强烈要求,也没有这样做,这意味着我不必为此情况编写属性侦听器。

听众

现在,我们的控件属性是属性,我们可以通过向它们添加侦听器(使用lambda表达式)来轻松地对状态更改做出React。

myControl.showStuffProperty().
   addListener(it -> showStuffChanged());

myControl.getNames().
   addListener((Observable observable) -> namesChanged());

结论

在设计自己的自定义控件时,通过属性和可观察的集合在控件类中公开其状态。 这样,每个人都将能够以与整个JavaFX框架一致的方式观察控件的状态,并使其他开发人员能够无缝地将其控件/应用程序与您的控件集成在一起。

翻译自: https://www.javacodegeeks.com/2014/07/javafx-tip-5-be-observable.html

javafx 教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值