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的視窗。