javafx 和swing_集成JavaFX和Swing
javafx 和swing
您可能想在秋千应用中执行此操作的原因
您可能想要重写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.}
});
提示
- 当您在JavaFX用户线程之外访问JavaFX资源时,JavaFX已经引发了异常,但是请记住,这种情况并不总是会发生。 为了最大程度地降低性能成本,并未检查所有情况。
- 如果您使用Substance第三方库,则每当在EDT外部访问Swing资源时,也会引发异常。 将Substance设置为Swing的外观可能是减少Swing方面并发错误的好方法。
- 在2个UI线程之间共享资源时要非常小心,请尝试尽可能避免这种情况。 解决多线程问题的最佳方法是避免它们,而这些问题是软件工程中最难解决的问题。 Swing最初是从多线程工具包开始而最终更改为单线程工具包,这是有原因的。
- 有时您可能想通过
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
javafx 和swing_集成JavaFX和Swing相关推荐
- javafx 和swing_集成JavaFX和Swing(修订版)
javafx 和swing 我刚刚完成了对使用Swing的应用程序组件的重写,现在正在使用JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我 ...
- javafx 教程_集成JavaFX和Swing
javafx 教程 我刚刚完成了对使用Swing的应用程序组件的重写,现在使用的是JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我一段时间 ...
- javafx 教程_集成JavaFX和Swing(修订版)
javafx 教程 我刚刚完成了对使用Swing的应用程序组件的重写,现在使用的是JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我一段时间 ...
- 集成JavaFX和Swing(修订版)
我刚刚完成了对使用Swing的应用程序组件的重写,现在正在使用JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我一段时间,最后一切都很好,我 ...
- 集成JavaFX和Swing
我刚刚完成了对使用Swing的应用程序组件的重写,现在正在使用JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件. 这是一个很大的应用程序,重写花了我一段时间,最后一切都很好,我 ...
- JavaFx教程-01初识javaFX
什么是JavaFX JavaFX是一个强大的图形和多媒体处理工具包集合,它允许开发者用来设计.创建.测试.调试和部署富客户端程序,和Java一样跨平台. JavaFX特点 官方对于JavaFX的解释如 ...
- javafx 教程_Swing和JavaFX:使用JFXPanel
javafx 教程 我很快将不得不在基于Swing的胖客户端中处理JavaFX –哦,很抱歉,我的意思是"多层富客户端"! 因此,这使我来看看JFXPanel . JFXPanel ...
- 通讯录javafx和mysql_用javafx实现通讯录
//先创建登录界面 package com.txl.jm; import javafx.application.Application; import javafx.event.ActionEvent ...
- 解决JavaFX报错缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
解决JavaFX报错缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序 方法 1:使用 Java 8 方法 2:使用 Java 模块系统 方法 3:使用引导类 很多 JavaFX 初 ...
最新文章
- Android中蓝牙的基本使用
- Latex 数学符号表
- 4.7 程序示例--算法诊断-机器学习笔记-斯坦福吴恩达教授
- Spring Boot 中 @EnableXXX 注解的驱动逻辑探讨
- QT的QJSValueIterator类的使用
- 七牛云徐晶:低延迟互动时代看好WebRTC和SRT
- latex参考文献BibTeX的使用方法
- 折叠屏究竟是不是智能手机的未来?| 畅言
- 1227: [SDOI2009]虔诚的墓主人
- WPF整理-使用ResourceDictionary管理Logical Resources
- SpringCloud(一)
- TP框架使用ajax的post请求方式下载文件
- leetcode *207. 课程表(拓补排序)(2020.8.4)
- opencv给视频加字幕加炫光
- 三款适合HDMI信号分配的分配器芯片
- numpy ndarry根据条件筛选数据
- 降钙素(Cys(Acm)²·⁷)-α-CGRP (human)、125448-83-1
- STM32——TIM1的TIM1_CH1N通道PWM初始化
- 快捷餐饮之店家后台评论管理及餐桌管理实现
- 华东理工《文献检索》MOOC (3)---精通web of science检索结果分析、JCR数据库检索
热门文章
- 一个多线程死锁案例,如何避免及解决死锁问题
- 阿里巴巴对Java编程【应用结构】的规约
- 【Java】continue和break区别
- HTML中常用知识点整理
- hql投影查询之—— [Ljava.lang.Object; cannot be cast to cn.bdqn.guanMingSys.entity.Notice
- PL/SQL经典练习
- 统计单词出现的次数并进行排
- 第2步 安装git 配置git用户 git的安装和项目的建立
- java schema名_关于Schema的名字空间
- 车提示检测轮胎气压_水淹车估价中心_辽宁中车检