1. 程式人生 > >JavaFX初探(1)

JavaFX初探(1)

JavaFX的初探(1)

恩,我是新手,寫的如果有什麼不合適的地方歡迎大家指出。這個是關於JavaFX相關的,大家都知道,JavaFX是甲骨文公司所主推的新一代GUI框架,做出的專案感覺上比swing更加靈活,因為他是支援CSS的,介面可以做的很漂亮,所以我看了一些網上的教程,準備試一試這個JavaFX。


環境配置

首先,JDK什麼的就不必說了,支援JavaFX的jdk版本,感覺使用Java8會好些。

然後就是eclipse,這裡說的eclipse是預裝了E(FX)Clipse外掛的Eclipse,我們可以這個地址找到他:點這裡

然後,安裝好jdk,解壓eclipse,然後就可以正式編寫程式碼了,要注意,jdk和eclipse的版本要對應,32位的JDK就要使用32位的eclipse,64位的就要對應64位的eclipse,否則會出現問題的。

等等,突然想到JavaFX還有一個SceneBuilder,似乎是用來拖拽控制元件,直接製作介面的工具,他可以生成一個字尾為fxml的檔案,用來表達整個視窗上控制元件的佈局。

不過在使用的過程中有一個問題,最終我還是選擇在程式碼中完成整個的介面,這一點在後面會提到。

Hello World

恩,那麼現在就說下最基本的一個JavaFX的寫法,首先,開啟eclipse,檔案選單,新建,工程,其他,這時會彈出一個新建工程的對話方塊,裡面有JavaFX,展開他,裡面就有JavaFX project。

如果Eclipse沒有E(FX)Clipse的外掛,那麼就會比較麻煩一點,步驟應該是這樣的,首先,新建一個普通的JavaProject,然後配置構建路徑,找到library,裡面有一個jre庫,展開他,裡面有Access Rule,對他雙擊進行編輯,第一個選項改為Access,第二個選項填寫 星號/兩個星號 (恩,原諒我使用漢字表達,Markdown沒法用*)

那麼,現在新建兩個類,一個用來編寫主窗體,一個包含主方法,用來啟動。

mainStart

mainStart.java 啟動類,包含mian方法,用來啟動工程。

package swd.util;

import swdc.application.MainStg;

public class MainStart {

    public static void main(String[] args) {
        MainStg.appLaunch(args);
    }

}

MainStg

繼承自JavaFX的Application類,他是JavaFX的主要用來表現的類,是主視窗。

那麼JavaFX是怎麼表達一個視窗的呢?我個人理解是這樣的,JavaFX建立一個視窗需要三個最基礎的元件,Stage(舞臺),Scene(場景),以及根節點。

而Application類則是包含了一個stage視窗物件的JavaFX的啟動類。

Stage

這是視窗的類,它是一個什麼都沒有的視窗,只有外部的系統視窗邊框。

Scene

這個是場景圖,可以用來載入外部的fxml檔案形成的Parent物件作為根節點,也可以用一個佈局面板進行初始化,佈局面板,恩,主要是BorderPane,FlowPane,HBox,VBox,Pane等,接觸過swing的對這些應該很熟悉。

這個Scene就可以看做是一個存放根節點的容器。

關於控制元件

FX中的控制元件,大部分都繼承自Node類,有一些屬性在這裡先說下,和Swing的很不同,

  • 設定控制元件的位置,在swing中使用setBounds或者setLocation,在FX中應該使用setLayoutX,和setLayoutY。
  • 設定控制元件的大小,Swing也是setBounds,或者setSize,而在FX中,則是setPrefSize。
  • JavaFX中,寬度和高度,如果有佈局決定,不自己設定,那麼無法得到他們的數值,但是可以通過他們的property讀取到,即WidthProprietary和HeightProperty。
  • 控制元件的新增,在swing中,直接使用add即可,但是在fx中,則需要getChildren.add,或者是getitem.add。
  • 還有很多,大家可以去查文件,英文看不明白可以用軟體翻譯。
package swd.application;

import javafx.scene.control.*;
import javafx.scene.layout.*;

public class MainStg{

    private Stage stg = new Stage();
    private Pane root = new Pane();
    private Scene sc = new Scene(root);

    private Label lbl = new Label("Hello World");

    public void start (primaryStage stage) throws Exception{
        stg.setWidth(400);
        stg.setHeight(400);
        stg.setScene(sc);

        lbl.setLayoutX(200);
        lbl.setLayoutY(200);
        root.getChildren().add(lbl);
        stg.show();
    }

    public static void appLaunch(String[] ARG){
        launch(ARG);
    }

}

這樣,第一個fx的程式就做好了,點選執行,就會看到彈出一個寫著hello world的視窗。