JavaFX目前是Java發展的重點項目,可以用來設計擁有輕量且高效能使用者圖形介面(Graphical User Interface, GUI)的應用程式(Application),還能作為Rich internet application來發佈。相較於傳統Java使用Awt、Swing實作Application(或是Applet)的方式,JavaFX提供了更多、更好的工具以及函式庫協助開發應用程式,而且製作出來的程式效能更好,畫面更美!
事實上,JavaFX早在2008年就已出現,在早期(2.0之前)的的版本中,JavaFX並未內建在Java中,而是要透過JavaFX Script來開發。由於先前並未接觸JavaFX,所以筆者也不太清楚JavaFX Script的用法。不過那也不重要了,因為在2010年,Oracle就宣佈廢除JavaFX Script,將JavaFX直接以Java的原生程式碼來開發。雖然筆者在幾年前便注意到了JavaFX SDK這東西,但也始終沒有想去了解它。
這次Oracle發佈的Java 8對筆者來說十分有吸引力,於是在了解Java 8的過程中,忽然又看到了JavaFX這個東西,比較不一樣的是,JavaFX不再提供JavaFX SDK,而是直接將JavaFX作為函式庫,內建在JDK和JRE中,並且將版本號碼跟著Java,稱為JavaFX 8,而不再是以前的JavaFX 2.1、JavaFX 2.2了。由此可知Oracle對於JavaFX的重視,也興起了筆者對於JavaFX的興趣,並且決定要來好好學習一下。
JavaFX的FX要念成「feks」,FX的意思網路上眾說紛紜,筆者較偏向「Function」這個詞的意思,因為JavaFX一開始的專案名稱是F3(Form Follows Function)。是為了要讓F3看起來更威,念起來更好聽,才改名為FX的吧!
JavaFX目前已直接內建在JDK和JRE中,因此它可以使用任何的Java函式庫,還可以在任意平台上執行(只要有安裝好JRE 8以上版本)。此外,它還允許使用CSS來實作JavaFX的GUI樣式,讓程式設計師可以專心寫程式,美工可以快速修改外觀,分工合作,使得開發專案的效率更高!若是連GUI的程式也不想寫,甚至可以使用Oracle提供的JavaFX Scene Builder工具來製作FXML!至於什麼是FXML,之後會再詳細探討,簡單來說,FXML是一個XML檔案,用來描述(編排)JavaFX應用程式的場景(Scene),這裡所講的場景就是程式的圖形使用者介面(GUI)。
如果害怕辛辛苦苦製作出來的JavaFX程式在以後就不被Java環境支援,Oracle有承諾說他們的JavaFX的支援時間很長,所以不用擔心寫出來的應用程式不久之後就不能使用了。
在GUI方面,JavaFX著實下了不少功夫,除了原生(Native)的控制項之外,還支援WebView。可以將網頁內建在JavaFX的應用程式中,還可以使用JavaScript。在WebView裡的JavaScript可以呼叫外面的Java API,在外面的Java API也可以呼叫WebView裡的JavaScript。若是想要把以前寫的Swing程式,也用到JavaFX上,可以透過SwingNode這個類別來達成。
JavaFX還號稱提供了足夠的GUI控制元件,可以用來開發任何需求的應用程式,且這些元件能使用CSS來定義樣式,另外,應用程式本身就預設有多種Theme,可用setUserAgentStylesheet()方法來設定。
更進階的功能有,提供3D圖形功能、繪畫(Canvas,Printing)功能,並支援Rich Text Format(RTF)、多點觸控、高解析度顯示、高效能的多媒體引擎(基於GStreamer)。
雖然有點太遲了,但JavaFX終於開始支援我們常常講的「顯卡加速」、「硬體加速」。它的圖形在硬體圖形加速管線(Hardware-accelerated graphics pipeline)上渲染,簡單來講就是可以用GPU來幫忙繪制圖形,這樣速度會比較快。但如果執行環境不支援圖形硬體加速,則會自動以軟體來進行渲染。
Oracle對JavaFX 8提供了幾個範例程式,做出來的效果都還不錯,令筆者著迷到想棄Swing不用了!