使用SpringBoot接管javafx

首先,springboot是一个很方便的东西,恩,尤其是对各种bean的管理上面,自己编写的项目难免会出现结构比较混乱的情况,而spring可以很好的解决这个问题,springboot是一个spring的快速开发项目。

step1 准备

springboot并没有官方对javafx的支持,但是有一个开源的项目,叫做springboot-java8-support,我们可以通过它来整合javafx。springboot就不必多说了,无论是STS还是idea都有很完善的支持,springboot-java8-support在这里:

<dependency>
    <groupId>de.roskenet</groupId>
    <artifactId>springboot-javafx-support</artifactId>
    <version>2.1.6</version>
</dependency>

然后maven clean,maven update,这样工程就得到了更新,新导入的包就会加入项目中。

step2 创建view

打开sceneBuilder,新建一个fxml,然后放上需要的东西,把他处理好之后移到resource文件夹里面,然后新建一个class,继承AbstractFxmlView,并且添加注解:

@FXMLView( value = "你的fxml的地址,相对于resource", css = {"你的css文件的位置,可以用多个,相对于resource"} )

然后,我会在这里进行一些在sceneBuilder不太好进行处理的ui的初始化,编写方法initUI,添加注解PostConstruct,在spring完成注入之后,就会自动调用此方法进行初始化。

spring这里面使用了很多注解,这些注解是什么,怎么起到作用的,这一点我之前做过一些了解,后续会整理出来。

其实我比较喜欢在这里处理在view里面的界面逻辑,在controller里面处理和数据相关的逻辑。

step3 创建controller

新建一个class,实现Initializable接口,然后添加方法initialize。

import de.felixroske.jfxsupport.FXMLController;
import javafx.fxml.Initializable;

import java.net.URL;
import java.util.ResourceBundle;

@FXMLController
public class StartController implements Initializable {

    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }
}

好了,现在我们就可以和正常的javafx一样进行各种逻辑处理了,但是很多其他的ui逻辑都在view上面,因此这里可以放的基本是和数据相关的东西。

step3 修改Application类,启动应用

主类是需要继承AbstractJavaFxApplicationSupport这个类型,添加main方法和SpringBootApplication注解。我们使用launch方法代替SpringApplication.run,具体的可以看看AbstractJavaFxApplicationSupport的launch的实现:


    /**
     * Launch app.
     *
     * @param appClass the app class
     * @param view     the view
     * @param args     the args
     */
    public static void launch(final Class<? extends Application> appClass,
                              final Class<? extends AbstractFxmlView> view, final String[] args);

/**
     * Launch app.
     *
     * @param appClass     the app class
     * @param view         the view
     * @param splashScreen the splash screen
     * @param args         the args
     */
    public static void launch(final Class<? extends Application> appClass,
                              final Class<? extends AbstractFxmlView> view, 
final SplashScreen splashScreen, final String[] args);

 /**
     * Launch app.
     *
     * @deprecated To be more in line with javafx.application please use launch
     * @param appClass     the app class
     * @param view         the view
     * @param splashScreen the splash screen
     * @param args         the args
     */
    @Deprecated
    public static void launchApp(final Class<? extends Application> appClass,
                              final Class<? extends AbstractFxmlView> view,
 final SplashScreen splashScreen, final String[] args);

我们可以看到,至少需要一个Application的class,就是继承了AbstractJavaFxApplicationSupport这个的,然后我们还需要一个view,作为启动的界面,以及main函数的参数args,如果需要,还可以使用SplashScreen作为启动时候的闪屏,就是应用加载的时候的那个界面,你如果用过word就应该知道我的意思。

好了,点击运行,springBoot就带着javafx起来了,稍等一会你就可以看到一个javafx的窗口。

对了,如果需要对窗口做出调整,应该使用GUIState类的静态方法获取Stage,当然,这个Stage就是主窗口的Stage了。

猜你喜欢

转载自blog.csdn.net/YunJian01/article/details/81842299