最近準備用Java開發桌面軟件,以前都是直接用awt,swing,現在準備入手一下JavaFX來開發桌面軟件.
下載JavaFX(使用JDK7,8...可無視此步驟)
JavaFX在JDK7以及之後的版本集成(JDK自帶了)
但是在Java11被抽離了出來,所以我們使用Java11和後面的版本的JDK都需要自行下載JavaFX.
如果嫌麻煩 可以通過我上傳的資源進行下載: https://download.csdn.net/download/qq_41806966/12462366
進入官網: https://openjfx.io/
界面如下,往下滑
下面兩個按鈕分別對應下載,和下載源碼(OpenJDK)
我們點擊Download選擇對應版本就可以下載了
下載完後解壓 內容如下
在lib文件夾下就是我們使用的jar包了
在Eclipse中配置庫
每次都要導入jar包顯得格外麻煩,所以我們可以在Eclipse中將這些jar包添加成一個庫
注: 本質上是擁有其餘jar的引用,所以在別的電腦上進行開發也需要重新配置一下,否則提示庫丟失等.
我們選擇新建的 java 項目,右鍵 Properties(快捷鍵ALT+Enther),選擇Java Build Path
選擇User Library
我們需要新建一個庫,選擇UserLibrary
將文件夾lib內的jar全添加進庫,使用Ctrl加選.
添加完後點擊Apply and Close 然後將剛剛新建的庫添加進項目,選擇,點擊finish
配置完成,我們接下來就可以在項目中使用javafx了
JavaFX代碼
Hello World
現在,我們來實現一個簡單的hello,world
首先,新建一個類,繼承自Application(注意,是javafx的Application)
並且在這個類裏面創建main方法,調用launch(args) 運行,傳遞的是main方法的參數
我們需要實現 start() 方法,start方法有一個參數,Stage類(javafx的頂級容器),可以讓我們設置窗體大小,設置標題,設置場景等.
hello,world的代碼如下,就幾行,直接貼圖
注意: 在Java9以上的則需要引入(requires)對應模塊,並且導出此類所在模塊(因爲javafx要使用我們編寫的這個類,所以需要導出 exports,並且在別的包中可能需要使用此包,所以要使用依賴導入 requires transitive)
運行結果如下
如果學過swing的就知道,我們關閉窗體並不會真的關閉(程序還在後臺運行),但是在javafx中關閉後就自動給你關閉了.
點擊按鈕顯示界面
我們需要用到按鈕(Button),並且點擊按鈕纔會顯示之前的界面 hello, world
實現思路很簡單,我們沒有設置佈局,所以後面添加進窗體的會覆蓋前面的.
也就是我們點擊按鈕其實是將按鈕從容器中刪除(刪除後就不覆蓋之前的標籤了)
代碼如下
@Override
public void start(Stage primaryStage) throws Exception {
//設置標題
primaryStage.setTitle("shendi test javafx");
//創建標籤 使用的都是 javafx 下的類
Label helloLabel = new Label("hello, world");
//創建按鈕
Button helloButton = new Button("點我彈出顯示歡迎");
//創建面板 構造方法有兩個重載,一個爲無參數,一個爲可變參數 傳遞要添加的子節點
StackPane pane = new StackPane(helloLabel);
//獲取面板的子類集合(繼承自List)直接添加組件
pane.getChildren().add(helloButton);
//創建場景 後面兩個參數爲寬高,也可以不設置(運行起來會怪怪的)
Scene scene = new Scene(pane,200,100);
//設置場景
primaryStage.setScene(scene);
/* 給按鈕添加活動事件 這裏傳遞的是一個EventHandler
* 可以自己繼承此類實現 然後這裏傳遞this,也可以使用外部類繼承 這裏使用那個類的對象.也可以使用匿名類
* 這裏使用的匿名類
*/
helloButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
//當按鈕被點擊就會執行這裏
//我們需要顯示歡迎,歡迎本來是有的,不過被遮住了,所以我們移除掉按鈕就可以了.
pane.getChildren().remove(helloButton);
}
});
//顯示窗體
primaryStage.show();
}
運行結果
更多的其實就是API的使用了,可以參考官方的文檔.