javafx 教程_集成JavaFX和Swing(修订版)
javafx 教程
我刚刚完成了对使用Swing的应用程序组件的重写,现在使用的是JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件。 这是一个很大的应用程序,重写花了我一段时间,最后一切正常,我很高兴自己做到了。
您可能想在Swing应用中执行此操作的原因
您可能想要重写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节点在JavaFX应用程序中嵌入一个swing组件。
建筑学
本质上,当您在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.}
});
提示
- 当您在JavaFX用户线程之外访问JavaFX资源时,JavaFX已经引发了异常,但是请记住,这并不总是发生。 为了最大程度地降低性能成本,并未检查所有情况。
- 如果您使用Substance (我认为毫无疑问,Swing具有最佳外观的自由外观),那么只要在EDT外部访问Swing资源,也会抛出异常。 将“物质”设置为Swing的外观可能是一个很好的解决方案,可以减少您可能在Swing上发生的并发错误。
- 在两个UI线程之间共享资源时要非常小心,请尽量避免这种情况。 解决多线程问题的最佳方法是避免它们,而这些问题是软件工程中最难解决的问题。 Swing最初是作为多线程工具包而结束更改为单线程工具包,这是有原因的。
- 有时您可能想通过
Platform.isFxApplicationThread()
检查您是否在JavaFX用户线程上,而只发出对Platform.runLater(…)
的调用,因为如果您在JavaFX用户线程上并调用runLater(...)
内部代码的执行仍将推迟到以后,这可能不是您想要的。 - 有很多JavaFX控件可以覆盖它们的摆动控件,但是它们是不同的并且具有必须适应的不同功能。 还有一些控件,如JFormattedTextField尚不存在。 总之,JavaFX与Swing不同。 您必须适应不同的控件以及不同的Arquitecture和API。
其他要签出的链接:
- Oracle教程: http : //docs.oracle.com/javafx/2/swing/jfxpub-swing.htm
翻译自: https://www.javacodegeeks.com/2013/07/integrating-javafx-and-swing-revised.html
javafx 教程
javafx 教程_集成JavaFX和Swing(修订版)相关推荐
- javafx 教程_集成JavaFX和Swing
javafx 教程 我刚刚完成了对使用Swing的应用程序组件的重写,现在使用的是JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我一段时间 ...
- javafx 教程_用JavaFX编写图块引擎
javafx 教程 随着JavaFX嵌入式版本的问世,我们的框架对于游戏开发变得越来越有趣,因为我们现在可以瞄准平板电脑和智能手机等小型消费类设备. 因此,我决定对JavaFX进行更多的游戏编写实验. ...
- javafx 和swing_集成JavaFX和Swing(修订版)
javafx 和swing 我刚刚完成了对使用Swing的应用程序组件的重写,现在正在使用JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我 ...
- javafx 和swing_集成JavaFX和Swing
javafx 和swing 我刚刚完成了对使用Swing的应用程序组件的重写,现在正在使用JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我 ...
- javafx 教程_示例介绍:JavaFX 8打印
javafx 教程 我有一段时间没有写博客了,我想与其他人分享有关JavaFX的所有信息(我的日常工作和家庭可能是借口). 对于那些是本博客的新手,我是JavaFX 2 Introduction by ...
- javafx 教程_何时使用JavaFX代替HTML
javafx 教程 像我这样的JavaFX爱好者反复面对的一个问题是何时(或为什么)使用JavaFX而不是HTML的问题(5). 这是我的两分钱: 如果-,则应使用JavaFX. -您对坚固性/质量感 ...
- javafx 教程_新的JMetro JavaFX 11兼容版本
javafx 教程 你好,我们又见面了! 这次,是一个新版本,该版本与JavaFX 11兼容. 继续阅读以获取详细信息. JMetro 8.5.7和11.5.7版本 JMetro代码已分为2个分支. ...
- JavaFx教程-01初识javaFX
什么是JavaFX JavaFX是一个强大的图形和多媒体处理工具包集合,它允许开发者用来设计.创建.测试.调试和部署富客户端程序,和Java一样跨平台. JavaFX特点 官方对于JavaFX的解释如 ...
- javafx 教程_Swing和JavaFX:使用JFXPanel
javafx 教程 我很快将不得不在基于Swing的胖客户端中处理JavaFX –哦,很抱歉,我的意思是"多层富客户端"! 因此,这使我来看看JFXPanel . JFXPanel ...
最新文章
- 通俗易懂讲解梯度下降法!
- js+jQuery获取全选并用ajax进行批量删除
- Netty系列之一开始使用
- 类如何调用自己的私有成员_如何正确地给自己和团队成员贴标签?|衡量团队管理 20 讲视觉笔记 14...
- 《零基础》MySQL WHERE 子句(十三)
- jquery实现双击事件不触发单击事件
- [leedcode 137] Single Number II
- access 导入 txt sql语句_从零开始学 MySQL - 数据库的导入导出和备份
- 电商扣减库存_外贸电商仓储:代打包代贴单一件代发全球
- pb生成pbtxt时出错
- html鼠标经过图片有浮起效果,CSS实现鼠标滑过卡片上浮效果的示例
- linux红帽子安装ftp,Red Hat Enterprise Linux 5 (红帽子企业版5)下Samba, VSFTP配置与安装...
- Android系统开发 ----- 系统服务开发
- js中数组的entries方法
- 大数据分析未来财富管理谁会脱颖而出?
- 计算机专业省赛一等奖有什么好处,厉害了!计算机应用专业的他获省级书法比赛一等奖...
- 光电成像相关检测技术整理
- 深入理解SR-IOV和IO虚拟化
- Deep Supervision:深度监督(2014)+DHM
- Metasploit(msf)利用ms17_010(永恒之蓝)出现Encoding::UndefinedConversionError问题