import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.text.Text; import javafx.scene.text.Font; Stage { title: "First JavaFX" width: 250 height: 80 scene: Scene { content: Text { font: Font { size: 16 } x: 10, y: 30 content: "Hello World - JavaFX" } } } |
接著以JavaFX編譯器 (javafxc.exe) 編譯JavaFX Script,由於JavaFX 1.X同時支援桌上型應用程式 (Desktop Profile) 與手機應用程式 (Mobile Profile),因此其編譯方式可分為:
- 預設方式:javafxc *.fx
- 桌上型應用程式:javafxc -profile desktop -d desktop *.fx
- 手機應用程式:javafxc -profile mobile -d mobile *.fx
執行JavaFX類別,則以JavaFX直譯器 (javafx.exe) 執行類別檔案,執行方式亦可分為:
- 預設方式:javafx JavaFXApplication
- 顯示啟動圖像:javafx -splash:spash.jpg JavaFXApplication
- 桌上型應用程式:javafx -profile desktop JavaFXApplication
至JavaFX 2.0,Oracle將JavaFX重新改寫,以Java語法取代原JavaFX Script語法與移除支援手機的Mobile版本,並正式併入Java S.E. 7 Update 6中,將原有的JavaFX編譯器 (javafxc.exe) 與直譯器 (javafx.exe),以Java編譯器 (javac.exe) 與直譯器 (java.exe) 取代,因此可使用同一個編譯器編譯Java與JavaFX程式。
開發JavaFX應用程式需繼承javafx.application.Application抽象類別,Application抽象類別類似於Java Swing的JApplet類別,同樣有其「生命週期」,分別為:
- 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啟動等形式執行,因此其程式架構類似Java Swing,但較為精簡。由於視窗程式是以main()方法為進入點,因此在main()中執行Application抽象類別的launch()方法,啟動獨立的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 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 Hello World"); // 設定Stage的寬度 primaryStage.setWidth(250); // 設定Stage的高度 primaryStage.setHeight(200); primaryStage.setScene(scene); // 顯示Stage primaryStage.show(); } public static void main(String[] args) { launch(args); } } |
JavaFX以樹狀架構的方式組合物件,如同分層堆疊一般,各樹狀節點稱為Node,分為以下三類:
- Root:最上層的容器。
- Parent:置放物件的容器。
- Leaf:容器中的物件。
程式完成之後,同樣以Java編譯器 (javac.exe) 與直譯器 (java.exe) 編譯JavaFX程式與執行類別檔案。
【參考資料】
[1] 黃嘉輝,深入研究JavaFX 2。
[2] 黃嘉輝,深入研究Java Swing。
[3] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[7] JavaFX 2.2 API Specification.
[8] Java Platform, Standard Edition 7 API Specification.
© Chia-Hui Huang
沒有留言:
張貼留言