JavaFX基礎:1: 簡介

淼叔發表於2019-05-03

Sun早在2007年就推出了JavaFX,作為客戶端體驗增強的一項特性,在被Oracle收購之後似乎變得可有可無,使用者的反饋也一直不溫不火。這篇文章中,我們來介紹一下JavaFX的基礎特性以及一個簡單的例子在IDEA中執行。

JavaFX的目的

JavaFX的FX是什麼的縮寫的問題,雖然這不重要,但是從其用途和目的來看:

  • Fat-Client Extension:傳統方式下桌面應用,在Java中則是Swing的天下
  • Flash & Flex:JavaFX主要用於建立RIA應用,而這正是Flash的長項。
    能不能取代Flash這裡不談,作為技術的更新,替換Swing則還可能是一個可控制的方向。

功能特性

  • FXML :JavaFX應用中以XML為基礎的使用者介面標記語言,在JavaFA應用中體現為.fxml檔案
  • Scene Builder :可視的佈局設計工具,用於給使用者提供拖拽方式的介面設計方式。
  • Swing Compatibility : 在JavaFX應用中,可以嵌入Swing內容
  • CSS Styling: 可以使用CSS對應用進行渲染
  • 豐富的API’s:提供豐富的API包括2D和3D圖形效果等。

架構設計

在這裡插入圖片描述
JavaFX的架構設計構成和關聯的元件如上圖所示,簡單說明如下:
JavaFX Public APIS and Scene Graph:進行整體介面功能與Scene特性的提供
Quantum toolkit:JavaFX高效能圖形化引擎
Glass Windowing toolkit:小型而搞笑的視窗化系統
Media engine:媒體引擎
Web engine:Web引擎
Java2D等:Java2D與OpenGL相關的圖形化功能支援
JavaFX應用利用JDK的API庫同時作為客戶端桌面應用,需要JVM的執行支援。

IDE

Oracle官方使用Netbean對JavaFX使用進行介紹,很多其他的IDE也同樣能達到效果,這裡使用IDEA進行說明,IDEA中直接建立Flex型別的Project, 選擇JDK,輸入專案名稱即可完成Sample工程的建立
在這裡插入圖片描述
IDEA生成的Sample程式碼會顯示一個窗體,在Sample中只設定了窗體的大小和標題,我們這裡對標題進行修改(顯示Hello Liumiao),對大小也進行修改(設定為600x600)

在這裡插入圖片描述
然後通過選單的右鍵執行即可確認效果。
在這裡插入圖片描述
注:實際執行的過程較為複雜,各種IDE之所以能夠正常執行,是因為其將所需要的jar都在classpath中進行了設定,比如上述sample執行時演示機的執行示例語句如下所示:


/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=53471:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/tools.jar:/Users/liumiao/Desktop/JavaFXSample/out/production/JavaFXSample sample.Main

參考文章

https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-overview.htm

相關文章