javafx 和swing_集成JavaFX和Swing(修订版)

javafx 和swing

我刚刚完成了对使用Swing的应用程序组件的重写,现在正在使用JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件。 这是一个很大的应用程序,重写花了我一段时间,最后一切都很好,我很高兴自己做到了。

您可能想在秋千应用中执行此操作的原因

您可能想要重写Swing应用程序并将其更改为使用JavaFX,最简单的方法是通过一次更改每个组件来增量执行此操作。 这要求您将每个新更改的JavaFX组件与其余的Swing应用程序集成在一起。

我将总结为什么您可能要开始将应用程序从Swing重写为JavaFX:

  • 这是未来

从某种意义上讲,Swing几乎已经死了,因为它不会得到任何进一步的发展。 JavaFX是Java的新UI工具包,它为将来提供了更好的准备,例如触摸支持,3D,内置动画支持,视频和音频播放等。

  • 未来可能对移动设备的支持:Android,IOS…

已经有一个可以使用的原型,使您可以将javafx应用程序移植到名为RoboVM的IOS – http://www.robovm.org/ 。 随着越来越多的JavaFX开源,更好的RoboVM将会变得更好,通过这种开源,可能会出现其他实用程序,这些实用程序将允许移植到其他环境。

  • 牢固

JavaFX是一个经过精心设计的工具包,具有快速增长的步伐,光明的未来和一系列良好的免费UI工具。 此外,与过去不同,Oracle给予开发人员反馈非常重要的意义,即更改和调整其API以实现其目标。

  • 好漂亮啊

与Swing不同,不算第三方库本身就很丑陋,JavaFX从一开始就看起来不错,尤其是JavaFX 8的新Modena外观: http : //fxexperience.com/2013/03/modena-theme-update / -。 鉴于当今用户期望外观好,设计良好的应用程序,这是一个很好的观点。

  • 不错的附加功能

一些不错的功能,例如图表API,支持HTML5的嵌入式浏览器等。

你怎么做

回到JavaFX 1.3,您可以将Swing嵌入JavaFX,但不能反之,至少不是正式的。 我实现了一个Swing组件,该组件允许您将JavaFX内容嵌入到Swing中(称为JXScene),并将其在jfxtras项目中公开可用。 这是将JavaFX场景嵌入Swing应用程序的唯一方法。

现在,带有JavaFX 2.X的Oracle成为在Swing中嵌入JavaFX的官方方法,这更有意义,但不幸的是,这不是在JavaFX中嵌入Swing的方法,我想这在大多数情况下就足够了。 但是,随着即将到来的JavaFX 8,您还可以将Swing组件与Swing节点一起嵌入到JavaFX应用程序中。

建筑学

本质上,当您在Swing中嵌入JavaFX时,最终会有2个正在运行的UI线程:Swing EDT线程和JavaFX User线程。

将来有可能像SWT那样只有两个线程,这使得Swing在JavaFX User Thread上运行,但是现在我们必须使用2个线程来管理方式。

在UI中同时运行的两个线程使问题变得复杂,并且使JavaFX集成不像您预期​​的那样容易,除非您正在做一些琐碎的小型应用程序,但我想这不是大多数现实世界中的场景。用例。 如果您正在做一个小型应用程序,那么最好在JavaFX中完成所有操作。

编码

JavaFX提供了JFXPanel,它是一个承载JavaFX场景的Swing面板。 您可以在JFXPanel上设置场景,然后在可以添加Swing组件的位置添加面板。

要访问JavaFX数据,您必须将代码包装在Runnable对象中,并调用Platform.runLater方法:

jbutton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Platform.runLater(new Runnable() { @Overridepublic void run() {fxlabel.setText("Swing button clicked!"); }});}
});

另一方面是Swing数据。 该数据只能由EDT访问。 为了确保您的代码在EDT上运行,请将其包装到Runnable对象中并调用SwingUtilities.invokeLater :

SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {//Code to change Swing data.}
});

提示

  1. 当您在JavaFX用户线程之外访问JavaFX资源时,JavaFX已经引发了异常,但是请记住,这种情况并不总是会发生。 为了最大程度地降低性能成本,并未检查所有情况。
  2. 如果您使用Substance (我认为毫无疑问,Swing具有最佳外观的自由外观),那么只要在EDT外部访问Swing资源,也会抛出异常。 将Substance设置为Swing的外观可能是减少Swing方面并发错误的好方法。
  3. 在2个UI线程之间共享资源时要非常小心,请尝试尽可能避免这种情况。 解决多线程问题的最佳方法是避免它们,而这些问题是软件工程中最难解决的问题。 Swing最初是从多线程工具包开始而最终更改为单线程工具包,这是有原因的。
  4. 有时您可能想通过Platform.isFxApplicationThread()检查您是否在JavaFX用户线程上,而只发出对Platform.runLater(…)的调用,因为如果您在JavaFX用户线程上并调用runLater(...)内部代码的执行仍将推迟到以后,这可能不是您想要的。
  5. 有很多JavaFX控件可以覆盖它们的摆动控件,但是它们是不同的,并且具有必须适应的不同功能。 还有一些控件,例如JFormattedTextField尚不存在。 总之,JavaFX与Swing不同。 您必须适应不同的控件以及不同的Arquitecture和API。

其他要签出的链接:

  • Oracle教程: http : //docs.oracle.com/javafx/2/swing/jfxpub-swing.htm

参考: Pixel Duke博客上来自JCG合作伙伴 Pedro Duque Vieira的JavaFX和Swing集成(修订) 。

翻译自: https://www.javacodegeeks.com/2013/07/integrating-javafx-and-swing-revised.html

javafx 和swing

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

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

相关文章

php读取csv指定行_PHP快速读取CSV大文件指定行

1、如何快速获取CSV大文件的总行数?办法一:直接获取文件内容,使用换行符进行拆分得出总行数,这种办法对小文件可行,处理大文件时不可行;办法二:使用fgets一行一行遍历,得出总行数&am…

使用WebLogic共享库连续交付ADF应用程序

介绍 当ADF应用程序建立在共享库之上时,有一种非常流行的架构模式。 因此,主应用程序被部署为EAR,并且所有子系统都在共享库中实现,这些共享库可以在“热”模式下独立构建并作为JAR部署到WebLogic,而无需停机。 这种方…

信号与系统 chapter1 常见信号及其变换

什么是信号? 它的定义及其宽泛,但在我们电子通信工程中,我们可以把它看成一种波形;在数学上,我们可以把它看成一个函数。说到函数,函数又分为离散与连续,信号也是一样,分为离散信号…

11选5下期算法_11选5为什么你不中奖

11选五 顾名思义 11个号里选择五个号码球 即中奖 当然玩法也多种多样 这也让很多彩民摸不清头绪 11选5这个东西呢 首先要心态好 毕竟20分钟一起 也算频率大的了 如果盲目的倍投 盲目的跟号 那就容易陷进去 无法自拔 所有的彩票都有概率 都有他所在的规矩 例如127910 8就在79中间…

信号与系统 chapter2 冲激偶函数与阶跃函数

什么是冲激偶函数 简单来说,从负方向向0趋近,结果为无穷大,从正方向趋近于0,结果为无穷小 它的性质: 冲激函数求导得来,推广: 阶跃函数 会考察你让你写出函数表达式 看上面那个式子&#xf…

c语言对中文字符串编码_Python || 学习笔记(1):数据类型字符串变量和编码

数据类型特性:对于0很多的整数,python允许用_对0进行分离10_000_000_000就等同于1000000000016进制用0x开头进行表示对于很大或很小的浮点数必须使用科学计数法表示,表示方法为 2.13e10表示2.13x10^10转义字符与C语言一样,为\&…

信号与系统 chapter3 冲激函数的尺度变换

在chapter2里我们简单的示例了一个阶跃函数做尺度变换的例子,在这一节里我们会对冲激函数做尺度变换,同样很简单 关于δ(at)\delta(at)δ(at) 它的证明如下,使用换元法即可得到: 始终利用的是冲激函数只在t0t0t0处有意义 如果它…

mongodb 主键_MongoDB主键是您的朋友

mongodb 主键MongoDB集合中的所有文档都有一个主键,称为_id 。 该字段在插入后自动分配给文档,因此几乎不需要提供它。 _id字段有趣的是,它是基于时间的 。 也就是说, _id的基础类型为ObjectId ,是12字节的BSON类型 &a…

web前端知识点太多_前端知识点总结——框架中报错集锦(含解决方法)

前端知识点总结——框架中报错集锦(含解决方法)1.vue1、指定template直接返回多个标签Component template should contain exactly one root element.解决方案:指定一个容器,将需要返回的多个标签放在这个容器中 div/form/a…2、读取了一个变量的属性但是…

信号与系统 chapter4 单位脉冲与单位阶跃序列

标题里有序列,说明咱们这里的自变量都是离散的,离散序列是相对于前面的连续信号而言,这里给它做了一个比较 单位脉冲序列 可以看到单位脉冲函数依然是十分牛批,只有在t0t0t0的地方才发挥作用 单位阶跃 两个单位阶跃序列做差可以…

原始性能数字– Spring Boot 2 Webflux与Spring Boot 1

我对性能测试的设置如下: 示例应用程序公开了一个端点(/ passthrough / message),该端点又调用下游服务。 到端点的请求消息如下所示: {"id": "1","payload": "sample payload&q…

airpods耳机敲击没反应_iOS11.2.6造成AirPods耳机出现奇怪问题 网友:解决方法很简单...

大河报大河客户端记者 华飞众所周知,苹果为了解决iOS11.2.5中特殊字符、图片引起的系统崩溃的问题,突然推送了iOS 11.2.6正式版,而随着更新用户不断增加,目前该版本对于使用AirPods 的iphone用户带来了不少奇怪问题,特…

gradle运行测试代码_Gradle的好处:运行单个测试

gradle运行测试代码我们可以使用Java插件添加的test任务,使用Gradle运行测试代码。 默认情况下,将执行项目中找到的所有测试。 如果要运行一个测试,可以使用Java系统属性test.single和测试名称。 实际上,系统属性的模式是taskName…

信号与系统 chapter5 线性系统与非线性系统

今天我们说一说系统的分类 线性系统 顾名思义,满足线性性质的系统 它有三个特性: 齐次性可加性线性性 这里常见在选择题里让你判断 f1(.)f_{1}(.)f1​(.)代表的是激励,系统的响应不仅和它当前的状态相关,还和以前的状态相关的…

python爬取音乐源码_手把手教你使用Python抓取QQ音乐数据(第一弹)

【一、项目目标】获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名、专辑名、播放链接。由浅入深,层层递进,非常适合刚入门的同学练手。【二、需要的库】主要涉及的库有:requests、json、openpyxl【三、项目实现】1.了解 QQ 音乐网站的 rob…

Java接口–历年来Java 9之旅–默认和私有方法

介绍 Java接口已经比Java版本进行了更多的演变,而Java 8和Java 9则有所发展。在本文中,我们将探讨接口在Java 8之前的样子以及如何在Java 8和Java 9中得到增强。 Java 8之前的接口 接口将具有一个或多个抽象方法,如下所示: publ…

信号与系统 chapter6 时变与时不变系统

时不变系统 通俗来说,就是输入延迟一段时间后,输出也延迟一段相同的时间。比如说一个示波器,你要给它上电显示波形,你就是示波器的输入,你一按下开关,它就马上亮了;下次你在开关上发呆5秒钟再按…

胆战心惊形容什么_胆战心惊的近义词

胆战心惊近义词: 不寒而栗( 注释:栗:畏惧,发抖。不冷而发抖。形容非常恐惧。)胆战心惊( 注释:战:通“颤”,发抖。形容十分害怕。)毛骨悚然( 注释:悚然:害怕的样子。汗毛竖起,脊梁骨发冷。形容十…

信号与系统 chapter7 因果与非因果

“因果”这个词常常在佛教里提到,比如有因才有果,放在信号与系统里就是你有输入才有输出,但是在所有的系统中你有输入就一定有输出吗?又或者是你有输出但没有输入,这样的系统如何称呼? 此类系统称为非因果系…

互联网和大数据是什么意思_何为互联网大数据?为什么每个人在数据的面前,相当于一丝不挂?...

何为互联网大数据?大数据背后核心迷局是什么?那通过下面一段对话,您可能就明白了。——必胜客店的电话铃响了。客服拿起电话:客服:您好! 请问有什么需要我为您服务?顾客:你好! 我想要…