2017年3月21日 星期二

JavaFX架構與Scene Builder

JavaFX可以用來設計擁有輕量且高效能使用者圖形介面(Graphical User Interface, GUI)的應用程式(Application),還能作為Rich internet application來發佈。相較於傳統Java使用Awt、Swing實作Application(或是Applet)的方式,JavaFX提供了更多、更好的工具以及函式庫協助開發應用程式,而且製作出來的程式效能更好,畫面更美!



JavaFX 1.X是以JavaFX Script的形式撰寫程式,其副檔名為fx
由於JavaFX Script與傳統Java差異甚多,開發人員需花費較多的時間學習,也因此JavaFX Script並未受到很大的重視。

至JavaFX 2.0,Oracle將JavaFX重新改寫,以Java語法取代原JavaFX Script語法與移除支援手機的Mobile版本,並正式併入Java SE 7 Update 6中,將原有的JavaFX編譯器 (javafxc.exe) 與直譯器 (javafx.exe),以Java編譯器 (javac.exe) 與直譯器 (java.exe) 取代,因此可使用同一個編譯器編譯Java與JavaFX程式。

Oracle發佈的Java 8後,JavaFX不再提供JavaFX SDK,而是直接將JavaFX作為函式庫,內建在JDK和JRE中,並且將版本號碼跟著Java,稱為JavaFX 8,而不再是以前的JavaFX 2.1、JavaFX 2.2了。


開發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;
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目前已直接內建在JDK和JRE中,因此它可以使用任何的Java函式庫,還可以在任意平台上執行(只要有安裝好JRE 8以上版本)。此外,它還允許使用CSS來實作JavaFX的GUI樣式,讓程式設計師可以專心寫程式,美工可以快速修改外觀,分工合作,使得開發專案的效率更高!若是連GUI的程式也不想寫,甚至可以使用Oracle提供的JavaFX Scene Builder工具來製作FXML,藉由拖曳的方式配置物件,待完成配置之後,並儲存成FXML格式檔案。

Scene Builder畫面 : 


如何使用建置好的FXML檔案於程式碼中 : 把建置好的fxml檔案放到Eclipse的專案裡(記得要重新整理,不然執行時找不到fxml檔,會錯誤)
程式碼如下 :

package main;

import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MainJavaFx extends Application {
  
    
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage stage) throws IOException {
     Parent root = FXMLLoader.load(getClass().getResource("/main/MyFxml.fxml"));
     
        Scene scene = new Scene(root);
        stage.setTitle("Table View Sample");
        stage.setScene(scene);
        stage.show();
    }
} 

執行結果如下 :

沒有留言:

張貼留言