任何的程式都要從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
來呼叫,所以寫上去會比較好,避免在不同平台下建置同樣的專案會有無法正常執行的情況!