JavaFX是一個強大的圖形和多媒體處理工具包集合,它允許開發者來設計、創建、測試、調試和部署富客戶端程序,并且和Java一樣跨平臺。
2008年12月05日 Sun微系統公司今天正式發布了基于Java語言的平臺JavaFX 1.0。因為當時富互聯網應用(RIA,Rich Internet application)正火,具有代表性的有:Adobe公司的Flex,微軟的Silverlight和Oracle的JavaFX,還有HTML5+CSS3+JavaScript組合。感覺當時Oracle推出JavaFX主要是為了和Adobe的Flex和微軟的Silverlight競爭。當然,隨著Html5的盛行,在RIA開發上這三者都慢慢地退出了歷史舞臺。HTML+CSS+JS有了一統天下的趨勢。所以后來,Flex捐贈給了Apache,成為旗下的一個開源項目,Silverlight停止了更新。其實,個人挺喜歡Silverlight技術的。JavaFX 1.0的時候開發者需使用一種名為JavaFX Script的靜態的、聲明式的編程語言來開發JavaFX應用程序。因為JavaFX Script將會被編譯為Java字節碼,程序員可以使用Java代碼代替。 JavaFX不用于開發RIA了,但是JavaFX還可以用來開發桌面程序以及移動設備上的程序。但是貌似開發移動應用,各個平臺都有自己的SDK,比如開發Android和ISO應用都會使用原生地API,應該很少有人會使用像JavaFX或者QT這種第三方的技術吧(個人見解)!所以,JavaFX剩下的能使用的地方就是桌面應用程序了!JavaFX 2.0之后的版本摒棄了JavaFX Script語言,而作為一個Java API來使用。因此使用JavaFX平臺實現的應用程序將直接通過標準Java代碼來實現。而且從JDK 7u6 開始,JavaFX被內置到Java SE中,原來如果要開發JavaFX程序,需要單獨下載JavaFX的SDK,但是現在不需要了。 從Java8開始,JavaFX的版本也更新為JavaFX8。現在的JavaFX主要由原來Java Swing工作組進行維護,由于JavaFX的種種優點,在Java桌面開發方面JavaFX會慢慢取代原來的Java Swing。我覺得現在的JavaFX和微軟的WPF比較像,JavaFX現在的競爭對手應該是用于桌面開發WPF。WPF是一門很贊的技術,自定義控件可以將程序打造得很驚艷。Windows7中的Windows Media Center就是使用WPF技術開發的。而且WPF已經推出多年,較JavaFX更加成熟。但是JavaFX有跨平臺的優勢! 不過話說回來,以后桌面開發肯定會越來越少,更多的是移動App開發和Web程序開發。但是,在可預見的未來,桌面開發肯定不會消亡。
官方對于JavaFX的解釋如下: JavaFX Overview JAVAFX概覽 我個人主要覺得有一下幾點: 1. JavaFX是一個Java庫,包括用Java寫成的類和接口。所以使用JavaFX寫的程序可以跨平臺運行。而且現在大量成熟的Java庫都可以為JavaFX所使用。 2. 內置大量UI控件和CSS支持。層級樣式表(CSS)將外觀和樣式與業務邏輯實現進行了分離。圖形設計師可以使用Fxml語言(一種XML語言)來表述圖形界面,使用CSS來定制程序的外觀和樣式。程序員可以使用Java代碼來表述業務邏輯。 3. 內置Canvas API以及特效,動畫等可以讓你制作出類似Flash的程序。 3. 本身提供對三維圖形的支持,而且支持硬件加速。 4. 還有就是類似WPF的屬性綁定。 5. 此外,JavaFX中還可以放置Java Swing組件,支持WebView即使用HTML編寫的頁面。 當然還有很多,這里我只說了我了解到的一些特性。具體可參看上面給出的官方鏈接中的描述。
這是Oracle官方對JavaFX框架架構的一個描述,大概了解下,看不懂關系不大。參考文獻:Understanding the JavaFX Architecture 具體在用戶看來,一個JavaFX程序應該是這樣子的:一個Stage,Stage中包含一個Scene,一個Scene中可以包含多個Control。這里的Stage就相當于我們的一個Windows或者說窗體,然后窗體中是用來容納內容的Scene,我們可以在Scene中添加我們的布局控件,UI控件形成我們最終的UI界面。
下面以一個簡單的程序說明怎么開發JavaFX程序。因為Java8內置了JavaFX,所以你如果安裝的是JDK8,不需要額外的配置,就可以直接開發JavaFX程序。 我們打開Eclipse,新建一個Java PRoject。對,就是一個普通的Java工程。然后新建一個類,該類需要繼承javafx.application.Application類。然后編寫代碼。下面的程序實現這樣一個功能:點擊Button的時候,改變Button的內容。。
package cn.tzy.javafx.hello;import javafx.application.Application;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.layout.BorderPane;import javafx.stage.Stage;public class HelloApplication extends Application { @Override public void start(Stage primaryStage) throws Exception { /** * 首先我們創建一個Button,當我們點擊Button的時候,改變Button的內容。 */ Button btnHello = new Button("Hello"); /** * 設置btnHello按鈕點擊事件 * 這里使用了Java8的Lambda表達式。setOnAction的參數為EventHandler<ActionEvent> value * EventHandler為一個接口,所以我們有三種方式實現EventHandler接口: * 1. 創建一個內部類 * 2. 創建一個匿名類 * 3. 使用Lambda表達式(適用于函數體不大的情況) */ btnHello.setOnAction(event->{ btnHello.setText("Hello World, I am JavaFX!"); }); /** * BorderPane是一個用于布局的Pane,BoerderPane將面板分割為上下左右中五部分。 * 我們可以將UI控件放置在BorderPane的上下左右和中間。 * 這里將將Button放置在中間。 */ BorderPane pane = new BorderPane(); pane.setCenter(btnHello); // 將pane加入到Scen中 Scene scene = new Scene(pane, 500, 500); // 設置stage的scen,然后顯示我們的stage primaryStage.setScene(scene); primaryStage.setTitle("Hello World"); primaryStage.show(); } public static void main(String[] args) { // JavaFX中main函數必須需要調用launch函數 launch(args); }}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354運行結果如下:
這一節我們用純Java代碼寫了一個很簡單的JavaFXML程序,下一節:JavaFX入門(二):JavaFX和FXML 中我們使用FXML編寫程序界面,然后用Java書寫后臺邏輯實現這一節中相同的功能。