JavaFX之springboot搭建

目录

  • 一:准备
  • 二:修改Application类,测试应用
  • 三:改造应用

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

一:准备

在maven中央仓库上面找到下面的依赖,导入build.gradle中
implementation 'de.roskenet:springboot-javafx-support:2.1.6'

二:修改Application类,测试应用

主类是需要继承AbstractJavaFxApplicationSupport这个类型,添加main方法和SpringBootApplication注解。我们使用launch方法代替SpringApplication.run
JavaFX之springboot搭建_第1张图片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 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();
    }

效果:
在这里插入图片描述
JavaFX之springboot搭建_第2张图片
到这里,表示我们在springboot启动应用成功了,但是目前和springboot-javafx-support还没有关系。

三:改造应用

  1. 创建一个fxml文件
    在这里插入图片描述
    JavaFX之springboot搭建_第3张图片
    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);
        }
    }
    

    效果:
    JavaFX之springboot搭建_第4张图片

你可能感兴趣的:(JavaFX)