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