任何的程式都要從Hello World開始學,JavaFX雖是使用Java原生程式碼撰寫,但它的用法還是跟Awt和Swing有一點差異。目前最適合開發JavaFX程式的IDE應該是Netbeans,所以之後都會使用Netbeans來學習JavaFX。
Hello JavaFX程式碼
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
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 9: JavaFX應用程式的類別必須要繼承(Extends)javafx.application.Application。
Line 12: start()方法是JavaFX應用程式的程式進入點。
Line 34: launch()方法可以用來執行獨立的JavaFX應用程式,常用於Java的程式進入點main()。這裡要注意的是launch()方法是Application類別下的public static方法,所以呼叫launch()方法的類別可以不必繼承Application。
Line 9,26: JavaFX應用程式把GUI定義為Stage和Scene。Stage和Scene的關係如下圖:
Stage是JavaFX應用程式最上層的容器,一個應用程式擁有一個固定的Stage,而Stage底下雖可以建立出不同的Sence,但一個Stage只能同時使用一個Sence。
Line 23,24,26: 建立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來呼叫,所以寫上去會比較好,避免在不同平台下建置同樣的專案會有無法正常執行的情況!