JavaFX程式架構

開發JavaFX應用程式需繼承javafx.application.Application抽象類別,Application抽象類別類似於Java Swing的JApplet類別,以其「生命週期」執行JavaFX,分別為:

  • init():初始化JavaFX應用程式。
  • start():為JavaFX應用程式的進入點,在此為Java Applet。
  • launch():啟動獨立 (Standalone) 的JavaFX應用程式,在此為視窗程式。
  • stop():當JavaFX應用程式結束之前,將執行stop()方法。

其程式架構如下:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
...

// 繼承javafx.application.Application抽象類別
public class JavaFXHelloWorld extends Application {

  @Override
  public void start(Stage primaryStage) {
    ...
  }

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

JavaFX同樣以main()方法為進入點,但由於JavaFX可同時以視窗程式、Java Applet或以Java Web Start啟動等形式執行,因此其程式同時包含main()start()方法。

由於視窗程式是以main()方法為進入點,因此在main()中執行Application抽象類別的launch()方法,啟動獨立的JavaFX應用程式,則以視窗的形式執行JavaFX程式。若是以Java Applet形式執行,則將不會執行main(),而是由Application抽象類別的start()方法開始,因此上述的程式架構可同時滿足視窗程式、Java Applet與以Java Web Start啟動等形式,一舉數得。

請參考以下範例:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.text.Text;
import javafx.scene.Group;

// 繼承javafx.application.Application抽象類別
public class JavaFXHelloWorld extends Application {

  @Override
  public void start(Stage primaryStage) {

    Text text = new Text("JavaFX 8 Hello World");
    text.setX(50);
    text.setY(50);

    Group group = new Group();
    group.getChildren().add(text);

    // 設定Scene的Layout Pane
    Scene scene = new Scene(group);
    // 設定Stage的標題
    primaryStage.setTitle("JavaFX 8 Hello World");
    // 設定Stage的寬度
    primaryStage.setWidth(250);
    // 設定Stage的高度
    primaryStage.setHeight(150);
    primaryStage.setScene(scene);
    primaryStage.setResizable(false);

    // 顯示Stage
    primaryStage.show();
  }

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

程式完成之後,同樣以Java編譯器 (javac.exe) 與直譯器 (java.exe) 編譯JavaFX程式與執行類別檔案。

執行結果

由於JavaFX可同時以Java Applet、Java Web Start與視窗應用程式的形式執行,因此其建立Java Archive (JAR) 的方式與一般的Java程式不同,並非以jar.exe建立,而是以javafxpackager.exe建立JavaFX的JAR與相關檔案,稱為JavaFX Packager。

JavaFX Packager除了將類別、圖像等檔案建立JAR檔案之外,並分別產生執行Java Applet與Java Web Start所需的HTML網頁與JNLP檔案,可省去開發人員自行建立的步驟,此一概念稱為「Write Once, Deploy Anywhere」。

以JavaFX Packager建立JAR的方式可分為:

語法 類型
javafxpackager -createbss 將CSS檔案轉為Binary格式
javafxpackager -createjar 僅建立JAR檔案
javafxpackager -deploy 除了JAR之外,並產生HTML與JNLP檔案
javafxpackager -makeall 依序編譯JavaFX程式、建立JAR檔案、產生HTML與JNLP檔案
javafxpackager -signJar 對JAR進行電子簽署的認證動作

例如以下指令將同時建立JAR檔案、HTML與JNLP檔案,並設定輸出目錄為dist、Java Applet於網頁中的寬度與高度分別為250與150:

javafxpackager -deploy -appclass JavaFXHelloWorld 
  -srcdir . -outdir dist 
  -outfile JavaFXHelloWorld 
  -width 250 -height 150 
  -name JavaFXHelloWorld -v

results matching ""

    No results matching ""