集成JavaFX和Swing(修订版)
我剛剛完成了對使用Swing的應(yīng)用程序組件的重寫,現(xiàn)在正在使用JavaFX,最后得到了與更大的swing應(yīng)用程序集成的JavaFX組件。 這是一個很大的應(yīng)用程序,重寫花了我一段時間,最后一切都很好,我很高興自己做到了。
您可能想在秋千應(yīng)用中執(zhí)行此操作的原因
您可能想要重寫Swing應(yīng)用程序并將其更改為使用JavaFX,最簡單的方法是通過一次更改每個組件來增量執(zhí)行此操作。 這就要求您將每個新更改的JavaFX組件與其余的Swing應(yīng)用程序集成在一起。
我將總結(jié)為什么您可能要開始將應(yīng)用程序從Swing重寫為JavaFX:
- 這是未來
從某種意義上說,Swing已經(jīng)死了,因為它不會得到任何進一步的發(fā)展。 JavaFX是Java的新UI工具包,它為將來提供了更好的準備,例如觸摸支持,3D,內(nèi)置動畫支持,視頻和音頻播放等。
- 未來可能對移動設(shè)備的支持:Android,IOS…
已經(jīng)有一個可以使用的原型,使您可以將javafx應(yīng)用程序移植到名為RoboVM的IOS – http://www.robovm.org/ 。 隨著越來越多的JavaFX開源,更好的RoboVM將變得更好,隨著這種開源的發(fā)展,可能會出現(xiàn)其他實用程序,這些實用程序?qū)⒃试S移植到其他環(huán)境。
- 牢固
JavaFX是一個經(jīng)過精心設(shè)計的工具包,具有快速增長的步伐,光明的未來和一系列良好的免費UI工具。 此外,與過去不同,Oracle給予開發(fā)人員反饋很大的重要性,即更改和調(diào)整其API以實現(xiàn)其目標。
- 好漂亮啊
與Swing不同,不算第三方庫本身就很丑陋,JavaFX從一開始就看起來不錯,尤其是JavaFX 8的新Modena外觀: http : //fxexperience.com/2013/03/modena-theme-update / -。 鑒于當今用戶期望外觀好,設(shè)計良好的應(yīng)用程序,這是一個很好的觀點。
- 不錯的附加功能
一些不錯的功能,例如圖表API,支持HTML5的嵌入式瀏覽器等。
你怎么做
回到JavaFX 1.3,您可以將Swing嵌入JavaFX,但不能反之,至少不是正式的。 我實現(xiàn)了一個Swing組件,該組件允許您將JavaFX內(nèi)容嵌入到Swing中(稱為JXScene),并使其在jfxtras項目中公開可用。 這是將JavaFX場景嵌入Swing應(yīng)用程序的唯一方法。
現(xiàn)在,帶有JavaFX 2.X的Oracle成為在Swing中嵌入JavaFX的正式方法,這更有意義,但不幸的是,這不是在JavaFX中嵌入Swing的方法,我想這在大多數(shù)情況下就足夠了。 但是,隨著即將到來的JavaFX 8,您還可以通過Swing節(jié)點在JavaFX應(yīng)用程序中嵌入一個swing組件。
建筑學
本質(zhì)上,當您在Swing中嵌入JavaFX時,最終會有2個正在運行的UI線程:Swing EDT線程和JavaFX User線程。
將來有可能像SWT那樣只有兩個線程,使得Swing在JavaFX User Thread上運行,但是現(xiàn)在我們必須使用2個線程來管理方式。
在UI中同時運行的兩個線程使問題變得復雜,并且使JavaFX集成不像您期望的那樣容易,除非您正在做一些瑣碎的小型應(yīng)用程序,但我想這不是大多數(shù)現(xiàn)實世界中的場景。用例。 如果您正在做一個小型應(yīng)用程序,那么最好在JavaFX中完成所有操作。
編碼
JavaFX提供了JFXPanel,它是一個承載JavaFX場景的Swing面板。 您可以在JFXPanel上設(shè)置場景,然后在可以添加Swing組件的位置添加面板。
要訪問JavaFX數(shù)據(jù),您必須將代碼包裝在Runnable對象中,并調(diào)用Platform.runLater方法:
jbutton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Platform.runLater(new Runnable() { @Overridepublic void run() {fxlabel.setText("Swing button clicked!"); }});} });另一方面是Swing數(shù)據(jù)。 該數(shù)據(jù)只能由EDT訪問。 為確保您的代碼在EDT上運行,請將其包裝到Runnable對象中,然后調(diào)用SwingUtilities.invokeLater :
SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {//Code to change Swing data.} });提示
其他鏈接簽出:
- Oracle教程: http : //docs.oracle.com/javafx/2/swing/jfxpub-swing.htm
翻譯自: https://www.javacodegeeks.com/2013/07/integrating-javafx-and-swing-revised.html
總結(jié)
以上是生活随笔為你收集整理的集成JavaFX和Swing(修订版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5个编码技巧以减少GC开销
- 下一篇: gvim linux安装(gvim li