2024年11月9日 星期六

how to write a JavaFX application without use of SceneBuilder?

一般 JavaFX 的視窗要利用 Gluon公司釋放的 SceneBuilder 工具,建立視窗配置檔 .fxml,再由程式載入套用。其實不利用視窗配置檔,也可建立視窗,只是配置元件位置較麻煩。以下參考Copilot輸出範例,展示簡單版,不載入配置檔,視窗建立法。

  1.  
  2. // JavaFX_noscenebuilder.java
  3. // 展示如何不用場景建立器,配置元件位置,
  4. // 直接用程式部署元件的 JavaFX 視窗程式寫法
  5. //
  6. // 命令列編譯指令
  7. // > javac -classpath "...\javafx-sdk-xx\lib\javafx-swt.jar;...;." \
  8. // JavaFX_noscenebuilder.java
  9. //
  10. // 命令列執行指令
  11. // > java --add-modules javafx.controls,javafx.fxml \
  12. // -classpath . \
  13. // --module-path "...\javafx-sdk-xx\lib\javafx-swt.jar;..." \
  14. // JavaFX_noscenebuilder
  15. //
  16.  
  17. // 引用 JavaFX 套件
  18. import javafx.application.Application;
  19. import javafx.scene.Scene;
  20. import javafx.scene.control.Button;
  21. import javafx.scene.layout.StackPane;
  22. import javafx.stage.Stage;
  23.  
  24. // JavaFX 視窗類別須繼承自 javafx.application.Application
  25. public class JavaFX_noscenebuilder extends Application {
  26.  
  27. @Override
  28. // 舞台啟動方法,接收舞台參數 primaryStage,建立場景
  29. public void start(Stage primaryStage) {
  30. primaryStage.setTitle("Hello World!"); // 設定舞台標題
  31.  
  32. Button btn = new Button(); // 建立按鈕
  33. btn.setText("Say 'Hello World'"); // 設立按鈕顯示字串
  34. // 設定按鈕事件處理器,列印歡迎字串
  35. btn.setOnAction(event -> System.out.println("Hello World!"));
  36.  
  37. StackPane root = new StackPane(); // 建立堆疊面板,當場景根節點
  38. root.getChildren().add(btn); // 將按鈕加入堆疊面板的小孩容器
  39.  
  40. // 在場景根節點root下,建立300x100場景
  41. Scene scene = new Scene(root, 300, 100);
  42. primaryStage.setScene(scene); // 設定舞台場景
  43. primaryStage.show(); // 顯示舞台
  44. }
  45.  
  46. // 測試主程式
  47. public static void main(String[] args) {
  48. // 載入JavaFX執行期環境,建立應用程式物件,呼叫 start()啟動舞台及場景
  49. Application.launch(args);
  50. }
  51. }
    註: 程式編譯及執行所須參考的套件如下
  1. JavaFX xx -javafx-swt.jar
  2. JavaFX xx -javafx.base.jar
  3. JavaFX xx -javafx.controls.jar
  4. JavaFX xx -javafx.fxml.jar
  5. JavaFX xx -javafx.graphics.jar
  6. JavaFX xx -javafx.media.jar
  7. JavaFX xx -javafx.swing.jar
  8. JavaFX xx -javafx.web.jar
  9. JDK yy

沒有留言: