xp系统 javafx

JavaFX是用于在Java中构建图形应用程序的新标准库,但是许多程序员仍然对Swing甚至(高音)AWT感到困惑。 在Java诞生20年来,发生了很多事情。 两年前,当我开始研究Speedment UI的JavaFX库时,我发现很多东西都令人着迷! 这里有一些技巧,说明如何使用JavaFX工具包中的许多令人敬畏的新功能来构建ReactSwift的应用程序!

1.财产价值

如果您窥探了JavaFX组件,那么您一定遇到过“属性”一词。 几乎可以观察到FX库中的每个值,分隔符的宽度,图像的大小,标签中的文本,列表的子级以及复选框的状态。 属性分为两类: 可写和可读。 可以使用设置器或直接修改属性来更改可写值。 JavaFX将处理事件处理,并确保将通知依赖于该属性的每个组件。 可读值具有使您可以在值更改时接收通知的方法。

例:

// Read- and writable
StringProperty name = new SimpleStringProperty("Emil");
// Only readable
ObservableBooleanValue nameIsEmpty = name.isEmpty();

2.绑定值

当具有可写和可读的值时,可以开始定义这些值如何关联的规则。 可写属性可以绑定到可读属性,以便其值将始终与可读属性匹配。 绑定不是立即的,但是在观察值之前,它们将被解析(请参阅我在那里所做的)。 绑定可以是单向或双向的。 当然,如果它们是双向的,则两个属性都必须是可写的。

例:

TextField fieldA = new TextField();
TextField fieldB = new TextField();
fieldA.prefWidthProperty().bind(fieldB.widthProperty());

3.可观察的清单

属性不是唯一可以观察到的东西。 如果列表包含在ObservableList中,则也可以观察列表的成员。 ObservableList的React模型非常先进。 修改列表后,您不仅会收到通知,还可以确切地看到列表的更改方式。

例:

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]

如您所见,设置操作仅创建一个事件。

4. StringConverter

有时,您会发现需要创建绑定时组件中没有确切的值。 一个典型的例子是您拥有一个StringProperty ,该属性具有从TextField获得的路径。 如果您希望此值表示为Path的可观察属性,则需要为此创建一个StringConverter。

例:

TextField fileLocation = new TextField();
StringProperty location = fileLocation.textProperty();
Property<Path> path = new SimpleObjectProperty<>();Bindings.bindBidirectional(location, path, new StringConverter<Path>() {@Overridepublic String toString(Path path) {return path.toString();}@Overridepublic Path fromString(String string) {return Paths.get(string);}
});

对象属性未双向绑定到文本字段值。

5.表达

使用前面显示的Bindings-class可以创建各种表达式。 假设您有两个文本字段供用户输入信息。 现在,您需要定义一个只读字段,该字段始终包含一个字符串,如果两个字符串的长度相等,则表示两个字符之间的字符混合。 如果长度不相等,则应显示一条帮助消息。

例:

TextField first  = new TextField();
TextField second = new TextField();
TextField mix    = new TextField();mix.textProperty().bind(Bindings.when(first.lengthProperty().isEqualTo(second.lengthProperty())).then(Bindings.createStringBinding(() -> {int length        = first.lengthProperty().get();String firstText  = first.textProperty().get();String secondText = second.textProperty().get();char[] result     = new char[length * 2];for (int i = 0; i < length; i++) {result[i * 2]     = firstText.charAt(i);result[i * 2 + 1] = secondText.charAt(i);}return new String(result);}, first.textProperty(),second.textProperty())).otherwise("Please enter two strings of exactly the same length.")
);

结论

这些只是JavaFX众多功能中的少数。 希望您能找到更多利用事件系统的创新方法!

翻译自: https://www.javacodegeeks.com/2016/02/building-reactive-systems-javafx.html

xp系统 javafx

xp系统 javafx_使用JavaFX构建React系统相关推荐

  1. 迅为IMX6ULL教程更新至2060+页,裸机开发,Linux系统移植,驱动开发,构建文明系统,QT开发,系统编程

    教程更新至2060+页 彻底让零基础的同学真正学会 更完善的教程更全面的讲解更高效的学习 第一部分 总领及学习指引:主要探讨的学习方法,我们将尽量用比较简洁的方式,让大家明白嵌入式系统知识体系,以及它 ...

  2. 使用JavaFX构建反应系统

    JavaFX是用于在Java中构建图形应用程序的新标准库,但是许多程序员仍然对Swing甚至(高音)AWT感到困惑. 在Java诞生20年来,发生了很多事情. 两年前,当我开始研究Speedment ...

  3. 在RHEL5下构建基于系统用户的Postfix邮件系统

    在Linuxt服务中构建Postfix邮件服务器,在客户端可以通过Outlook Express.Web界面来收发邮件,我们需要先配置一下Apache.MYsql.PHP平台,另外还少不了DNS的支持 ...

  4. 转: React系统的入门系统

    评注:React系统的入门系统. 转:  http://www.infoq.com/cn/search.action?queryString=%E6%B7%B1%E5%85%A5%E6%B5%85%E ...

  5. 使用新的输入系统在 Unity 中构建第三人称控制器

    如果你随机挑选几款游戏,每款游戏可能会有不同的艺术风格和机制.不同的故事,甚至根本没有故事,但它们都有一个共同点:所有游戏都需要读取和处理输入来自键盘.鼠标.游戏手柄.操纵杆.VR 控制器等设备. 构 ...

  6. [IT] 软件自动化解决方案『免费开源』基于 JavaFx 的自动化测试系统,已更新至 V1.1.3 最新版

    欢迎查阅AutomationTestSystem(软件自动化测试系统) AutomationTestSystem是一个多功能自动化测试系统,使用JavaFx编写的Windows应用程序,可用于Appi ...

  7. React系统学习笔记

    ***当前阶段的笔记 *** 「面向实习生阶段」https://www.aliyundrive.com/s/VTME123M4T9 提取码: 8s6v 点击链接保存,或者复制本段内容,打开「阿里云盘」 ...

  8. 训练 AI 学会通过复制来构建 AI 系统

    https://www.toutiao.com/a1620271991216259 [训练 AI 学会通过复制来构建 AI 系统] 中国计算机视觉巨头商汤科技和香港中文大学的研究人员发布了有关 IRL ...

  9. 嵌入式系统实验 构建嵌入式Linux系统,《嵌入式系统与开发》构建嵌入式Linux系统-实验报告.doc...

    <嵌入式系统与开发>构建嵌入式Linux系统-实验报告 <嵌入式数据库sqlite移植及使用> 实验报告 学生姓名: 陈 彤 学 号: 1座机电话号码 专业班级: 130044 ...

最新文章

  1. 《剑指offer》-- 两个链表的第一个公共结点、链表中环的入口结点、删除链表中的重复结点
  2. Android ListView几个重要属性
  3. Redis的3个高级数据结构
  4. h5 一镜到底_这些一镜到底的H5还能怎么玩?
  5. sersync+rsync实现实时同步
  6. SPS用户管理的问题
  7. 真相了!为什么华为不惜成本也要支持外置存储卡扩展?
  8. 数据是怎么在网上安全传输的
  9. urdf与xacro的使用方法 机械臂模型仿真示例
  10. centos虚拟机克隆
  11. 贝叶斯估计原理及流程
  12. 新浪网产品设计指南(含UI规范)
  13. python学习大纲-Python学习大纲,全网最清晰学习思路
  14. 物联网终端安全系列(之二) -- 物联网终端安全需求分析
  15. 秦时明月--动漫人物介绍
  16. 使用opencv和C++实现多焦距图像合成
  17. MVC 简介,MVC数据库
  18. linux忘记root密码的解决办法
  19. Python基础语法(十一)
  20. 国赛2019逆向 easyGo lebel:golang / debug段的用处

热门文章

  1. YbtOJ#763-攻城略池【线段树合并】
  2. 2018CCPC吉林赛区(重现赛)补题部分——F线段树待补
  3. 【数论】GCD SUM(P2398)
  4. 【动态规划】分组背包 (ssl 2291)
  5. 森近林之助【字符串处理】
  6. 依存句法分析的任务以及形式化定义
  7. Spring依赖注入和控制反转
  8. 表扬几位积极的同学!
  9. 3分钟内看完这,bootstraptable表格控件,受益匪浅!
  10. 81. 搜索旋转排序数组 II---Leecode----java