使用JavaFX构建反应系统

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

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的反应模型非常先进。 修改列表后,您不仅会收到通知,还可以确切地看到列表的更改方式。

例:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android中访问手机存储空间,android – 访问手机内部存储以推入SQLite数据库文件...

我正在使用Netbeans和java开发我的android应用程序.当我使用模拟器时,我可以通过访问以下路径,data / data / com.example.helloandroid / database来访问File explorer并将SQLite数据库插入设备内部存储器但是当我使用真实设备时,我无法访问此位置以将SQLite文件推送到手机的内…

Spring中@Autowired注解、@Resource注解的区别

Spring不但支持自己定义的Autowired注解&#xff0c;还支持几个由JSR-250规范定义的注解&#xff0c;它们分别是Resource、PostConstruct以及PreDestroy。Resource的作用相当于Autowired&#xff0c;只不过Autowired按byType自动注入&#xff0c;而Resource默认按 byName自动注…

android中白色怎么表示,通知栏图标在android 5中变成白色

接受的答案不完全正确。当然&#xff0c;它会使通知图标显示颜色&#xff0c;但是这样做有一个很大的缺点-将目标SDK设置为比AndroidLolliop低&#xff01;如果您按照建议将目标SDK设置为20来解决您的白色图标问题&#xff0c;您的应用程序将不会针对AndroidLolliop&#xff0c…

Merge Sorted Array

这是一道我觉得有点不是很好的简单题 题目&#xff1a; Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:     You may assume that nums1 has enough space (size that is greater or equal to m n) to hold additi…

阿里巴巴android图标素材网,阿里巴巴矢量图标库

网站简介&#xff1a;IconFont:阿里巴巴矢量图标库是由阿里巴巴体验团队倾力打造的中国第一个最大且功能最全的矢量图标库&#xff0c;提供矢量图标下载、在线存储、格式转换等功能&#xff0c;是设计师和前端开发的便捷工具。IconFont平台是由阿里巴巴UX部门推出的矢量图标管理…

gkz cloud sql_使用Cloud SQL的Google App Engine全文搜索

gkz cloud sql许多Google AppEngine开发人员一直在等待全文搜索功能&#xff0c;特别是来自网络上最大的搜索引擎Google。 我很高兴看到Google团队正在努力&#xff0c;您可以在Google I / O 2011会议上查看&#xff1a;Bo Majewski和Ged Ellis进行的全文本搜索 。 据我所知&am…

poj1419 Graph Coloring 最大独立集(最大团)

最大独立集&#xff1a; 顶点集V中取 K个顶点&#xff0c;其两两间无连接。 最大团&#xff1a; 顶点集V中取 K个顶点&#xff0c;其两两间有边连接。 最大独立集补图的最大团最大团补图的最大独立集 #include<iostream> #include<cstring> #include<cstdio>…

android短信增加条目,Android仿短信条目右上角的红色小圆球提示气泡

可以重写View的onDraw完成该功能&#xff0c;也可以写布局文件完成该功能。现在使用布局文件完成。暂时先简单写一个TextView右上角的提示小红球&#xff0c;也可以根据需要写一个ImageView右上角的小红球提示。android:layout_width"match_parent"android:layout_he…

AccuREST Stub Runner发布

最近发布时间不错&#xff01; 我在Too Much Coding博客上的博客更多是关于发布&#xff0c;然后是关于任何具体主题;&#xff09; 在作为Brixton RC1的一部分发布Spring Cloud Sleuth之后&#xff0c;我们刚刚发布了AccuREST 1.0.4版本。 我们修复了一些错误&#xff0c;但引…

idea使用码云

每更改项目的内容会弹出框提示你是否需要发送码云更新 如果没选yes后想要更新码云 联合开发 发现回到A同事的项目中&#xff0c;Student.java并没有修改 完成后&#xff0c;发现的Student.java已经更新了&#xff0c;跟B同事的代码也是一样。因为从服务器下载了最新的代码。 …

android webview rem,Android部分webview rem计算误差记录

上周做了一个原生H5小游戏页面&#xff0c;使用rem来布局&#xff0c;然后在三星和华为的部分机型里面出现了rem计算出现误差的情况&#xff0c;截图如下在页面rem计算完成后&#xff0c;用两种方式获取font-size。然后结果不一样&#xff0c;导致某些元素通过rem计算后的值&am…

android usb弹窗权限r,Android USB权限对话框永远不会出现

我写了一个简单的应用程序,通过USB将命令发送到连接到Android 4.0平板电脑的USB打印机.出于某种原因,我无法获得声明接口和打开连接的权限.这是相关的代码&#xff1a;public class TestPrintActivity extends Activity {private UsbManager mUsbManager;private UsbDevice mDe…

mvvm 耗时加载进度条_ZK的实际应用:MVVM –加载和渲染数据

mvvm 耗时加载进度条先前的文章简要介绍了RIA框架ZK&#xff0c;以及其CSS Selector启发的控制器机制如何通过使在控制器类中引用UI组件的任务变得相对灵活来减轻UI更改所带来的一些负担。 然后&#xff0c;我们在上一篇文章中探讨了ZK中的MVVM模式如何允许单个ViewModel提供不…

@Autowired和可选依赖项

Autowired注释使我们的生活更轻松。 如果我们在类的属性上使用它&#xff0c;也可能导致代码量减少。 我们既不需要构造函数也不需要setter方法。 乍一看看起来很棒&#xff0c;但好处很少是没有成本的。 今天&#xff0c;我想让您知道必须支付的费用。 Autowired&#xff08…

¥人民币符号怎么打

有一种快捷键的方法&#xff08;不方便记忆&#xff09; 按住Alt0165 此方法适合任何输入法。转载于:https://www.cnblogs.com/wulibo/p/7575348.html

android 使用javascript,可以在Android中使用JavaScript吗?

可以在Android中使用JavaScript吗&#xff1f;如果是这样&#xff0c;怎么办&#xff1f;请提供一些示例。谢谢。最佳答案我在这里参加聚会很晚&#xff0c;但是我确实有这个需要。 iOS 7现在包含JavaScriptCorenative &#xff0c;并且确实很容易使用(尽管文档有限)。问题是我…

[POJ2151]Check the difficulty of problems(概率DP)

传送门 每个队之间是独立的 f[i][j]表示当前队伍前i个题答对j个的概率 满足条件的概率 全部方案&#xff08;除去答对0&#xff09;的概率 - 不满足条件的概率&#xff08;每个队伍答对1~n-1&#xff09; #include <cstdio> #include <cstring> #define N 101int …

ejb jsf jpa_完整的WebApplication JSF EJB JPA JAAS –第2部分

ejb jsf jpa视图–创建和JSF设置 本教程是第1部分的继续。 让我们创建一个新的Dynamic Web Project 。 如下图所示创建它&#xff1a; 请注意&#xff1a;在某些时候&#xff0c;Eclipse会询问您是否要添加JSF功能&#xff08;自动完成&#xff09;&#xff0c;然后启用它。 …

android ios logo原型,iOS关于logo和LaunchImage处理

1、软件测试的时候&#xff0c;程序员总会被测试的妹纸问到&#xff1a;这个logo怎么是黑底的呀&#xff1f;这个logo明明提供的正方形的&#xff0c;显示出来的怎么是圆角的&#xff1f;安卓都是正方形的呢&#xff1f;直接根据效果图来解释吧。不包含Alpha通道的logo包含Alph…

JavaFX:TouchGesture内存泄漏?

在我的一个项目中&#xff0c;最近几天我在与内存泄漏作斗争&#xff08;是……“耦合”&#xff09;&#xff0c;我得出的结论是可能存在与触摸/滚动手势有关的问题。 在下面的示例中&#xff0c;我有两个按钮。 第一个创建具有一千行的列表视图&#xff0c;第二个将其删除。 …