当前位置 > 主页 > 万和大讲堂 >


南京万和Java培训机构教你使用 JavaFX 构建 Reactive 系统

2016-03-07 14:29

  JavaFX 是Java中用来构建图形应用程序的新的标准库, 但许多程序员仍然坚持在使用Swing甚至AWT(额滴个神啊)。关于如何利用JavaFX工具集中的新的超棒特性来构建响应式的快速应用程序,南京万和Java培训机构这里给大家一些建议!


  1. 属性值


  如果你对Java FX组件做过完整的了解,移动遇到过属性(Property)这个东西。FX库中几乎每个值都可以被观察,分区(divider)的宽度,图片的尺寸,文本标识(label)中的文字,一个列表中的子项以及复选框(checkbox)的状态。属性分成另类:可写属性和可读属性。可写值可以被修改,使用设置器方法或者直接修改。 Java FX 会处理事件处置过程并确保每个依赖于此属性的组件都会被通知到。可读属性拥有能让你在其值被修改时接收到通知的方法。


  示例:


  // 可读-且可写


  StringProperty name = new SimpleStringProperty("Emil");


  // 只读


  ObservableBooleanValue nameIsEmpty = name.isEmpty();


  2. 绑定值


  当你拥有一个可写和可读值的时候,你可以开始就这些值如何关联定义规则。一个可写属性可以被绑定到一个可读属性,如此其值总是会匹配到可读的这个。绑定并不会立即发生,不过它们会在值被观察之前进行(看看我在那里做的就明白了)。 绑定可以是单向或者双向的。当然,如果它们之间是双向的,就需要两个属性都是可写的。


  示例:


  TextField fieldA = new TextField();


  TextField fieldB = new TextField();


  fieldA.prefWidthProperty().bind(fieldB.widthProperty());


  3. 可观察的列表


  属性并不是唯一可以被观察的东西。如果列表是被封装到了一个 ObservableList 中,那么列表的成员同样也是可以被观察到的。ObservableList 的响应模型是相当先进的。你不仅能在列表被修改时收到通知,也可以看到列表具体是如何被修改的。


  示例:


  List<String> otherList = Arrays.asList("foo", "bar", "bar");


  ObservableList<String> list = FXCollections.observableList(otherList);


  list.addListener((ListChangeListener.Change<? extends String> change) -> {


  System.out.println("Received event.");


  while (change.next()) {


  if (change.wasAdded()) {


  System.out.println(


  "Items " + change.getAddedSubList() + " was added.");


  }


  if (change.wasRemoved()) {


  System.out.println(


  "Items " + change.getRemoved() + " was removed.");


  }


  }


  });


  System.out.println("Old list: " + list);


  list.set(1, "foo");


  System.out.println("New list: " + list);


  上面代码的运行输出如下:


  Old list: [foo, bar, bar]


  Received event.


  Items [foo] was added.


  Items [bar] was removed.


  New list: [foo, foo, bar]


  如你所见,设置操作只会触发一次事件。


  南京万和Java培训机构后续会给大家带来更多的实用技术文,欢迎小伙伴们阅读。


最近开班 more>
  • Web前端开发
  • 软件测试
  • 软件测试预科班
  • AI大模型+全栈开发开班
  • 云原生精英班
  • 云网预科班
  • 开发课程基础班第三期
  • 开发课程基础班第二期
  • 开发课程基础班第五期
  • Java全栈
  • CISP
  • HCIP-cloud
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • OCP 19C
  • RHCA
  • 6月9日
  • 5月21日
  • 5月14日
  • 6月9日
  • 5月7日
  • 5月26日
  • 5月19日
  • 5月12日
  • 6月3日
  • 6月9日
  • 随时开课
  • 7月12日
  • 5月19日
  • 5月19日
  • 5月7日
  • 5月10日
  • 5月24日
  • 5月24日
  • 随时开课
  • 随时开课
    • 姓 名 :
    • 电 话 :
    • 课 程 :

技术交流群

  • Java大数据交流群560819979加入
  • Python技术交流群595083299加入
  • Oracle技术交流群595119011加入
  • Web前端技术交流群604697610加入
  • Huawei技术交流群482919361加入
  • Redhat技术交流群587875348加入
  • UI设计技术交流群511649801加入
  • Cisco技术交流群596886705加入
  • IT运维技术交流群605888381加入