日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

集成JavaFX和Swing(修订版)

發布時間:2023/12/3 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 集成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節點在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方面發生的并發錯誤。
  • 在2個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

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

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

    總結

    以上是生活随笔為你收集整理的集成JavaFX和Swing(修订版)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。