前言:本次結合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還沒有關係。
三:改造應用
-
創建一個fxml文件
fx:controller表示一個fxml處理器,這裏(非常類型android studio開發),注意這裏需要添加全路徑class名。可以將FXML文件中聲明的GUI組件綁定在一起。加載FXML文件時,將創建此類的實例。爲此,控制器類必須具有無參數構造函數。
fx:id:FXML元素分配ID。這些ID可用於引用FXML文件中其他位置的FXML元素。通過id,FXML命名空間中的屬性指定FXML元素的ID,可以將FXML文件中的JavaFX組件綁定到控制器類中的字段 -
創建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(); }); } }
@FXMLController是springboot-javafx-support的註解
表明這是一個FXML處理器,它會給控制器添加一個@Component的註解,將類交給spring容器管理。 -
創建view
@FXMLView(value = "/fxml/login.fxml" ) public class LoginView extends AbstractFxmlView { }
@FXMLView是springboot-javafx-support的註解
表示要在JavaFX視圖的上下文中使用的類。這些類與fxml標記文件結合使用。它會給控制器添加一個@Component的註解,將類交給spring容器管理。
AbstractFxmlView :它通過Spring爲Java FX控制器提供DI,同時支持使用註解@FXMLView來驅動,配置fxml,css等 -
改造啓動類
刪除重寫start@SpringBootApplication public class JavafxSpringboot1Application extends AbstractJavaFxApplicationSupport { public static void main(String[] args) { launch(JavafxSpringboot1Application.class, LoginView.class, args); } }
效果: