JavaFX入門(一):我的第一個JavaFX程序


JavaFX簡介
JavaFX是一個強大的圖形和多媒體處理工具包集合,它允許開發者來設計、創建、測試、調試和部署富客戶端程序,並且和Java一樣跨平台。

JavaFX發展歷史
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的解釋如下:
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編寫的頁面。
當然還有很多,這里我只說了我了解到的一些特性。具體可參看上面給出的官方鏈接中的描述。

JavaFX架構
這是Oracle官方對JavaFX框架架構的一個描述,大概了解下,看不懂關系不大。參考文獻:Understanding the JavaFX Architecture

 

 

JavaFX版HelloWorld
HelloWorld程序
下面以一個簡單的程序說明怎么開發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);
    }

}

運行結果如下:

 

 

HelloWorld程序說明
所有的JavaFX主程序都需要繼承Application類。
繼承了Application類的子類必須重寫start方法。start方法中可以進行UI控件的布局。當JavaFX程序啟動的時候,會自動調用start方法。
mian函數中必須調用launch方法,該方法會啟動JavaFX程序。
JavaFX程序用戶界面的頂層是stage,代表窗體。stage中是scene,scene中可以包含各種UI控件和布局控件,共同組成用戶UI。
當然,這只是一個入門的JavaFX程序,還看不出JavaFX技術的優點。
這一節我們用純Java代碼寫了一個很簡單的JavaFXML程序,下一節:JavaFX入門(二):JavaFX和FXML 中我們使用FXML編寫程序界面,然后用Java書寫后台邏輯實現這一節中相同的功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM