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

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

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

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

  • 这是未来

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

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

    从我所看到的情况来看,我认为这可以保证将提供对Android,IOS等的支持,Oracle已经有了在公共会议上展示的,可以运行的原型,唯一的问题是何时。 我认为用不了多久,可能很快就会在下一个JavaOne中看到更多有关此的信息。

  • 牢固

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

  • 好漂亮啊

    与Swing不同,不算第三方库本身就很难看,而JavaFX从一开始就看起来不错。 鉴于如今的用户期望外观设计精美的应用程序,这是一个很好的观点。

  • 不错的附加功能

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

你怎么做

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

现在,带有JavaFX 2.X的Oracle成为了将JavaFX嵌入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第三方库,则每当在EDT外部访问Swing资源时,也会引发异常。 将物质设置为您的Swing外观可能是一个很好的解决方案,可以减少您可能在Swing方面发生的并发错误。
  3. 在2个UI线程之间共享资源时要非常小心,请尝试尽可能避免这种情况。 解决多线程问题的最佳方法是避免它们,而这些问题是软件工程中最难解决的问题。 Swing起初是作为多线程工具包并最终更改为单线程工具包,这是有原因的。
  4. 有时您可能想通过Platform.isFxApplicationThread()检查您是否在JavaFX用户线程上,而只发出对Platform.runLater(…)的调用,因为如果您在JavaFX用户线程上并调用runLater(...)内部代码的执行仍将推迟到以后,这可能不是您想要的。

其他链接签出:

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

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

翻译自: https://www.javacodegeeks.com/2012/08/integrating-javafx-and-swing.html

集成JavaFX和Swing相关推荐

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

    javafx 和swing 我刚刚完成了对使用Swing的应用程序组件的重写,现在正在使用JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我 ...

  2. javafx 和swing_集成JavaFX和Swing

    javafx 和swing 我刚刚完成了对使用Swing的应用程序组件的重写,现在正在使用JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我 ...

  3. 集成JavaFX和Swing(修订版)

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

  4. javafx 教程_集成JavaFX和Swing

    javafx 教程 我刚刚完成了对使用Swing的应用程序组件的重写,现在使用的是JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我一段时间 ...

  5. javafx 教程_集成JavaFX和Swing(修订版)

    javafx 教程 我刚刚完成了对使用Swing的应用程序组件的重写,现在使用的是JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我一段时间 ...

  6. JavaFx,Swing小程序画板,画图工具

    JavaFx,Swing小程序画板 package sample;import javafx.application.Application; import javafx.geometry.Pos; ...

  7. rhel centos 源_Rhel centos 7的fips脚本

    rhel centos 源 My script implements a Red Hat solution. 我的脚本实现了Red Hat解决方案. Cryptography is vital for ...

  8. 将JavaFX 2.0与Swing和SWT集成

    JavaFX 2.0对JavaFX的改进之一是可以更轻松地与Swing和SWT进行互操作 . 一些在线资源记录了如何完成此操作. 其中包括将JavaFX集成到Swing应用程序和SWT Interop ...

  9. 在Swing和Swt中使用JavaFX

    转载自  在Swing和Swt中使用JavaFX 本人从08年12月份,JavaFX发布第一个版本开始关注它的发展. 算算到现在,也差不多是第五个年头了.期间经历了一些动荡,但JavaFX还是坚持着发 ...

最新文章

  1. 浅析C语言的一个关键字——register
  2. Virtual方法和Abstract方法的使用区别
  3. arduino yun 京东_Arduino发布多款全新升级产品,宣布将成立Arduino基金会
  4. python 的__str__和__repr__有什么区别?
  5. 安装mysql总结_安装mysql总结
  6. HDU2050 折线分割平面【组合】
  7. windows 2008服务器还原系统,windows 2008服务器系统
  8. Linux 服务器网卡驱动安装及故障排除
  9. java节假日算法_java节假日
  10. Android 小红点 未读消息功能 BadgeHelper
  11. App 抓包提示网络异常怎么破?
  12. Android Studio通过模拟器联网
  13. java 图文混排_图文混排的几种实现方案
  14. 36个非常有用的电脑知识?
  15. 小程序基础版本库与微信版本关系
  16. Microsoft SQL Server 实现数据透视表
  17. Spring框架—③依赖注入DI、Bean作用域及自动装配
  18. Redis Essentials 读书笔记 - 第一章: Getting Started (The Baby Steps)
  19. 基于java的在线学生管理系统【原创】
  20. qq影音qlv转mp4工具软件电脑pc版

热门文章

  1. java集合——遗留的集合
  2. Spring websocket 使用@Autowired 出现null
  3. rest和rest ful_还有更多REST技巧
  4. java更好的语言_五个使Java变得更好的功能
  5. 使用Spring boot,Thymeleaf,AngularJS从零开始构建新的Web应用程序–第3部分
  6. jcache_随机JCache内容:多个提供程序和JMX Bean
  7. 杜克大学_记录链接:与杜克一起玩
  8. apache camel_Apache Camel日志组件示例
  9. java8 streams_Java 8 Friday:使用Streams API时的10个细微错误
  10. servlet异步_如何使用异步Servlet来提高性能