原文地址http://download.oracle.com/javafx/2.0/swing/jfxpub-swing.htm
JavaFX 2.0 发布版引入了JFXPanel类,它位于
javafx.embed.swing
包中,使你能够将JavaFX内容绑定进Swing 程序。
本文教你怎么将JavaFX内容加进Swing 程序中并指导你如何在一个同时具备Swing 和JavaFX 的应用中正确使用线程。
添加JavaFX到Swing组件
要达到本文的目的,你要创建一个JFrame
组件,并添加一个JFXPanel
对象,JFXPanel组件的图形场景要包含JavaFX 内容。
和所有的Swing程序一样,你要在 Event Dispatch Thread (事件调度线程EDT)上创建图形用户接口(GUI) 。Example 1 展示了initAndShowGUI
方法,它创建了一个JFrame
组件并添加了JFXPanel
对象。创建JFXPanel
类的实例会在后台开始JavaFX 运行时。GUI 创建后,调用initFX
方法在JavaFX线程上创建JavaFX场景。
Example 1
public class Test { private static void initAndShowGUI() { // This method is invoked on the EDT thread JFrame frame = new JFrame("FX"); final JFXPanel fxPanel = new JFXPanel(); frame.add(fxPanel); frame.setVisible(true); Platform.runLater(new Runnable() { @Override public void run() { initFX(fxPanel); } }); } private static void initFX(JFXPanel fxPanel) { // This method is invoked on the JavaFX thread Scene scene = createScene(); fxPanel.setScene(scene); } private static Scene createScene() { //Code to create the JavaFX scene } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { initAndShowGUI(); } }); } }
JavaFX-Swing的互操作性和线程
由于JavaFX和Swing的数据存在与一个程序中,你可能遇到以下互操作的情况:
-
一个JavaFX的数据改变是由Swing的数据改变引起的.
-
反之.
SwingBrowser2: 一个集成了JavaFX组件的Swing应用
通过SwingBrowser2
可以看到 Swing - JavaFX是怎么互操作的,它为浏览器提供了常用的基本功能。你可以在它的地址栏中键入一个URL 来查看应用窗口加载的页面。你可以通过点页面链接去到新页面、返回前一页、打开标签页、加入书签、全页面检索。 Figure 1是该应用的窗口。
Figure 1 The SwingBrowser2 application window
Description of "Figure 1 The SwingBrowser2 application window"
初始化Swing数据
你可以从一个NB工程中的侧边栏点链接来下载swingbrowser2.zip
文件。解压到本地并从Netbeans IDE中运行为工程。确保你的NetBeans IDE版本是支持的。
SwingBrowser2打开后,它的GUI创建就在
EDT上。通过边栏的链接查看 Main.java
文件。
应用的顶层窗口是一个 JFrame
组件,包含了很多Swing 组件,比如一个tabbed面板,一个menu,几个text field、button,还有一个要显示JavaFX内容的JFX 面板。
加载 JavaFX内容
刚开始运行,JFX面板包含一个空的WebView
对象。当在地址栏输入一个URL后, AddressBar.java中的
action listener 就开始加载页面。代码见Example 4 .
Example 4
txtURL.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { browser.load(txtURL.getText()); } });
Browser.java文件中的load
方法验证URL并调用call方法,见
Example 5 .
Example 5
public void load(String str) { if (str != null { str = str.trim(); if (str.isEmpty()) return; String url = toURL(str); if (url == null) { url = toURL("http://" + str); } if (url != null) { Platform.runLater (new Runnable() { @Override public void run () { call(url); } } } private static String toURL(String str) { try { return new URL(str).toExternalForm(); } catch (MalformedURLException exception) { return null; } }
JavaFX数据应该只能在JavaFX线程上访问。call方法验证了线程并确保特点URL的页面被加载在
JavaFX线程上。Callback.java
文件中有完整代码。Example 6 是表明了实现方案的代码块。
Example 6
public final void call(final String value) { if (Platform.isFXApplicationThread()) { callImpl(value); } else { Platform.runLater(new Runnable() { @Override public void run() { callImpl(value); } }); } } protected void callImpl(String value) { getEngine().load(value); }
更新Swing数据
当 WebView
组件加载了新页面后,页面标题就从JavaFX数据中取回并传递给Swing GUI。然后页面标题就显示在标签页上并加入应用标题。 TabbedBrowser.java
中有完整代码。Example 7 是表明了实现方案的代码块。
Example 7
public WebPane addNewTab(final String url, boolean selected) { ... final WebPane wp = new WebPane(url); wp.getBrowser().getEngine().titleProperty().addListener( new javafx.beans.value.ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, final String title) { EventQueue.invokeLater(new Runnable() { @Override public void run() { setTitleAt(indexOfComponent(wp), title); setToolTipTextAt(indexOfComponent(wp), title); if (getSelectedComponent() == wp) { setWindowTitle(title); } } )}; } )}; }
想了解怎么部署二者的整合应用,到 Deploying JavaFX Applications 查看。
相关推荐
可以使用JavaFX的皮肤和组件库,或者引入第三方UI库,如JFoenix(JavaFX的Material Design风格)来提升视觉效果。 8. **安全与隐私**:通讯录包含敏感的个人信息,因此在设计时应考虑数据的安全性。可以采用加密...
9. **JavaFX Script**:虽然JavaFX 2.0以后与Java 7捆绑,但Java 6中的JavaFX Script提供了一种用于创建富客户端应用的新语言。 总的来说,“jdk-6u43-windows-i586”是Java 6时代的一个稳定更新,它在32位Windows...
开发者需要实现扫码识别逻辑,这可能涉及到图像处理和第三方扫码库的集成。 6. **多线程**:为了保证程序的响应性和非阻塞操作,开发者需要利用Java的并发特性,如线程池、Future、Callable等,来处理后台任务和...
它可能集成了第三方API来获取全球各地的气象数据,并通过友好的用户界面展示这些信息。 从项目文件名"WeatherApp2.0-master"来看,这是一个Git仓库的主分支,遵循开源项目的常规命名规范,其中"master"代表默认分支...
4. **Java Swing或JavaFX**:如果RSS阅读器是桌面应用,那么可能会用到Java GUI库,如Swing或JavaFX来构建用户界面。开发者需要了解组件布局、事件处理、数据绑定等概念。 5. **HTTP请求**:为了获取RSS feed,应用...
2. **增强的Swing组件**:Swing UI库得到了重大升级,提供了更好的外观和感觉,支持丰富的图形用户界面,并且与JavaFX更好地集成。 3. **XML处理增强**:JDK 1.6对Java API for XML Processing (JAXP)进行了改进,...
3. **用户界面设计**:虽然项目在美化方面有所欠缺,但理解UI/UX设计原则和使用JavaFX或Swing等库创建用户界面是改进项目的重要方向。 4. **文件组织结构**:Java项目通常遵循一定的文件结构,如src目录存放源代码...
- **OAuth 2.0**:可能使用OAuth 2.0进行授权,允许第三方应用安全地访问用户在微博上的信息。 6. **缓存机制** - **Redis**:为了提高性能和减少数据库压力,可能会使用Redis作为缓存服务,存储热门微博或用户...
1. **Java GUI编程**:可能使用了Java的Swing或JavaFX库来创建游戏界面,包括坦克、地图、得分等元素的展示。 2. **多线程**:游戏通常需要处理玩家输入、游戏逻辑更新、画面刷新等多个任务,这些任务可能会在不同...
这可能使用JavaFX或Swing库,或者更现代的Java Web Start或JavaFX与FXML的结合。 7. **错误处理和日志记录**:学习如何优雅地处理API错误,如网络故障、权限问题等,以及使用日志框架(如Log4j)记录程序运行信息。...
7. **许可文件**:说明软件的许可协议,可能为MIT、Apache 2.0或其他开源许可。 CloverBrowser的实现可能涉及到以下关键技术点: - **URL处理**:使用java.net.URL和HttpURLConnection类来解析和连接到互联网上的...
8. **持续集成/持续部署(CI/CD)**:随着项目的开发,持续集成和持续部署流程可以帮助确保代码质量并快速发布新版本。可以使用Jenkins、Travis CI或GitHub Actions等工具来自动化构建、测试和部署过程。 9. **测试...
Java提供了多种库来创建GUI,例如Swing或JavaFX。开发者需要理解事件处理、布局管理器以及如何设计用户友好的界面。 3. **音频处理**:听力测试涉及音频播放和分析。开发者可能使用Java Sound API或其他第三方库如...
JavaFX或Swing可以用来创建桌面应用的UI,而如果是Web应用,可以选择Spring Boot结合Thymeleaf、Freemarker或JSP进行视图渲染。 8. **安全性** 系统需要保护数据安全,防止未经授权的访问。Java提供SSL/TLS加密...
3. **用户界面(UI)设计**:SpotifyStreamer可能采用了JavaFX或Swing库来构建用户界面。这些库提供了丰富的组件,如按钮、文本框、播放器控件等,用于构建直观且易于使用的界面。 4. **音乐播放控制**:应用需要...
3. **Java类库**:Java Standard Edition (Java SE) 提供了大量的内置类库,如Swing和JavaFX用于图形用户界面(GUI)开发,可能在Frinika的用户界面中有所应用。 4. **MIDI和音频处理**:由于项目可能涉及音乐制作...
在 Java 中,可以使用 JavaFX 或 Swing 创建图形用户界面(GUI)。 ### 7. 数据缓存与状态管理 考虑到用户体验,`spotify_streamer` 可能采用了某种形式的数据缓存,以减少不必要的网络请求。此外,状态管理也是...
10. **持续集成/持续部署(CI/CD)**:为了保证代码的质量和自动化测试,团队可能使用了Jenkins、Travis CI等工具实现持续集成和持续部署。 综上所述,SEM-Group19项目是一个结合了Java编程、图像处理、数据解析...
- 如果是桌面应用,UI组件可能包括JavaFX或Swing等;如果是Web应用,可能是HTML、CSS和JavaScript的组合,或者使用React、Vue.js或Angular等前端框架。 - UI相关文件通常位于`src/main/resources`目录下,包括图片...
5. **用户界面设计**:使用JavaFX或Swing等库创建用户界面,使用户能够浏览和互动。 6. **数据存储与缓存**:可能涉及本地数据存储,如SQLite数据库,以缓存帖子避免频繁请求。 7. **版本控制**:通过Git进行版本...