任何的程式都要從Hello World開始學,JavaFX雖是使用Java原生程式碼撰寫,但它的用法還是跟Awt和Swing有一點差異。目前最適合開發JavaFX程式的IDE應該是Netbeans,所以之後都會使用Netbeans來學習JavaFX。



Hello JavaFX程式碼

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloJavaFX extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Say 'Hello JavaFX'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello JavaFX!");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello JavaFX!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

執行結果:

按下Say 'Hello JavaFX'按鈕後,於Command Line顯示出Hello JavaFX!

Hello JavaFX要注意的項目

Line 7:JavaFX應用程式的類別必須要繼承(Extends)javafx.application.Application

Line 10:start()方法是JavaFX應用程式的程式進入點。

Line 26:launch()方法可以用來執行獨立的JavaFX應用程式,常用於Java的程式進入點main()。這裡要注意的是launch()方法是Application類別下的public static方法,所以呼叫launch()方法的類別可以不必繼承Application

Line 10, 18:JavaFX應用程式把GUI定義為Stage和Scene。Stage和Scene的關係如下圖:

Stage是JavaFX應用程式最上層的容器,一個應用程式擁有一個固定的Stage,而Stage底下雖可以建立出不同的Sence,但一個Stage只能同時使用一個Sence。

Line 14, 15, 17:建立StackPane作為建立Sence時的root node(必須是Parent),並指定Sence的大小為300x250。Root node底下可以再接上不同的node。

Line 33:以往Java的main程式進入點如果在建置Jar檔案的時候有用到JavaFX Packager tool就可以不用寫,JavaFX Packager會自動將JavaFX Launcher包進JAR檔案中。但是如果沒有用到JavaFX Packager就還是得用main來呼叫,所以寫上去會比較好,避免在不同平台下建置同樣的專案會有無法正常執行的情況!