JavaFX之springboot搭建


前言:本次結合springboot,採用的是FXML的方式,打包工具gradle

一:準備

在maven中央倉庫上面找到下面的依賴,導入build.gradle中
implementation 'de.roskenet:springboot-javafx-support:2.1.6'

二:修改Application類,測試應用

主類是需要繼承AbstractJavaFxApplicationSupport這個類型,添加main方法和SpringBootApplication註解。我們使用launch方法代替SpringApplication.run
在這裏插入圖片描述launch方法在AbstractJavaFxApplicationSupport有多個重載

/**
 * appClass 應用啓動類
 * view 視圖,啓動界面
 * splashScreen 應用啓動時閃屏
 * args command 參數
 */
launch(final Class<? extends Application> appClass,final Class<? extends AbstractFxmlView> view, final String[] args);
launch(final Class<? extends Application> appClass,final Class<? extends AbstractFxmlView> view, final SplashScreen splashScreen, final String[] args)

注意:上面改造啓動類中,使用的是

launch(Class<? extends Application> appClass, String... args)

爲了測試工程是否搭建成功,所以先使用的Application的launch方法,因爲AbstractJavaFxApplicationSupport繼承Application,所以可以直接使用

接下來我們先創建一個場景測試一下

    @Override
    public void start(Stage stage) throws Exception {
        /**
         * 首先我們創建一個Button,當我們點擊Button的時候,改變Button的內容。
         */

        Button btnHello = new Button("Hello");
        /**
         * 設置btnHello按鈕點擊事件
         * 這裏使用了Java8的Lambda表達式。setOnAction的參數爲EventHandler<ActionEvent> value
         * EventHandler爲一個接口,所以我們有三種方式實現EventHandler接口:
         * 1. 創建一個內部類
         * 2. 創建一個匿名類
         * 3. 使用Lambda表達式(適用於函數體不大的情況)
         */
        btnHello.setOnAction(event->{
            btnHello.setText("Hello World, I am JavaFX!");
        });

        /**
         *  BorderPane是一個用於佈局的Pane,BoerderPane將面板分割爲上下左右中五部分。
         *  我們可以將UI控件放置在BorderPane的上下左右和中間。
         *  這裏將將Button放置在中間。
         */
        BorderPane pane = new BorderPane();
        pane.setCenter(btnHello);

        // 將pane加入到Scen中
        Scene scene = new Scene(pane, 500, 500);

        // 設置stage的scen,然後顯示我們的stage
        stage.setScene(scene);
        stage.setTitle("Hello World");
        stage.show();
    }

效果:
在這裏插入圖片描述
在這裏插入圖片描述
到這裏,表示我們在springboot啓動應用成功了,但是目前和springboot-javafx-support還沒有關係。

三:改造應用

  1. 創建一個fxml文件
    在這裏插入圖片描述
    在這裏插入圖片描述
    fx:controller表示一個fxml處理器,這裏(非常類型android studio開發),注意這裏需要添加全路徑class名。可以將FXML文件中聲明的GUI組件綁定在一起。加載FXML文件時,將創建此類的實例。爲此,控制器類必須具有無參數構造函數。
    fx:id:FXML元素分配ID。這些ID可用於引用FXML文件中其他位置的FXML元素。通過id,FXML命名空間中的屬性指定FXML元素的ID,可以將FXML文件中的JavaFX組件綁定到控制器類中的字段

  2. 創建controller
    創建一個loginController綁定login.xml,實現Initializable接口初始化組件狀態

    @FXMLController
    public class LoginController implements Initializable {
    
        private Stage primaryStage;
    	@FXML // 可忽略
        public Button button;// 注意必須爲public修飾符
        @Override
        public void initialize(URL location, ResourceBundle resources) {
            primaryStage = JavafxSpringboot1Application.getStage();
            button.setOnAction(event -> {
                Alert alert = new Alert(Alert.AlertType.INFORMATION, "hello world");
                alert.initOwner(primaryStage);
                alert.showAndWait();
            });
        }
    }
    

    @FXMLControllerspringboot-javafx-support的註解
    表明這是一個FXML處理器,它會給控制器添加一個@Component的註解,將類交給spring容器管理。

  3. 創建view

    @FXMLView(value = "/fxml/login.fxml" )
    public class LoginView extends AbstractFxmlView {
    }
    

    @FXMLViewspringboot-javafx-support的註解
    表示要在JavaFX視圖的上下文中使用的類。這些類與fxml標記文件結合使用。它會給控制器添加一個@Component的註解,將類交給spring容器管理。
    AbstractFxmlView :它通過Spring爲Java FX控制器提供DI,同時支持使用註解@FXMLView來驅動,配置fxml,css等

  4. 改造啓動類
    刪除重寫start

    @SpringBootApplication
    public class JavafxSpringboot1Application extends AbstractJavaFxApplicationSupport {
        public static void main(String[] args) {
            launch(JavafxSpringboot1Application.class, LoginView.class, args);
        }
    }
    

    效果:
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章