2025年java spring实战(spring javafx)

java spring实战(spring javafx)SpringBoot 对于 Java 程序员来说可以是一个福音 它让程序员在开发的时候 大大简化了各种 spring 的 xml 配置 那么在 JavaFX 项目使用 SpringBoot 会是怎么样的体验呢 这次使用 GuyHub 的开源项目 springboot javafx support 体验一下 SpringBoot JavaFX 开发 采用最新的 SpringBoot 版本和 springboot javafx support 版本 dependency nbsp nbsp nbsp nbsp dependency



SpringBoot对于Java程序员来说可以是一个福音,它让程序员在开发的时候,大大简化了各种spring的xml配置。

那么在JavaFX项目使用SpringBoot会是怎么样的体验呢?

这次使用“GuyHub”的开源项目springboot-javafx-support体验一下SpringBoot + JavaFX开发。

采用最新的SpringBoot版本和springboot-javafx-support版本


<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter</artifactId>    <version>2.3.2.RELEASE</version></dependency><dependency>    <groupId>de.roskenet</groupId>    <artifactId>springboot-javafx-support</artifactId>    <version>2.1.6</version></dependency>

springboot-javafx-support 主要两个关键的组件:

  1. AbstractJavaFxApplicationSupport (启动类继承它)

  2. AbstractFxmlView (视图类继承它)

视图排版

这里使用FXML布局界面。


<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.112"   xmlns:fx="http://javafx.com/fxml/1">   <children>      <Label layoutX="99.0" layoutY="109.0" prefHeight="34.0" prefWidth="394.0" text="Hello World!">         <font>            <Font size="26.0" />         </font>      </Label>   </children></Pane>

视图类

视图类很简单,只需要继承AbstractFxmlView并添加@FXMLView注解即可。




@FXMLViewpublic class HelloworldView extends AbstractFxmlView {}

启动类

启动类跟SpringBoot的启动类差不多,不过需要需要继承AbstractJavaFxApplicationSupport,然后将主视图类传进去。


这样一个超级简单的SpringBoot + JavaFX就完成了。

springboot-javafx-support默认带了启动界面,这在SpringBoot项目中是非常有必要的,因为SpringBoot项目通常来说启动都要一定的时间。

程序启动完成后,启动界面会自动关闭,显示程序主界面。

springboot-javafx-support 这个框架及其简单,所有源码总共才9个类,下面介绍一下这9个类。

  1. AbstractFxmlView 视频抽象基类,负责加载FXML界面,然后通过getView()来获取视图。

  2. AbstractJavaFxApplicationSupport 启动抽象基类,继承了JavaFX的Application,在init方法启动SpringBoot程序,并提供了一些声明周期的回调。

  3. Constant 一些配置key的常量,可以通过application.yml来配置JavaFX程序的标题,宽高、样式等。

  4. FXMLController Controller层的注解,使用这个注解的类将注册成为Spring Bean。

  5. FXMLView FXML视图层的注解,同样的,使用这个注解的类也将注册成为Spring Bean。

  6. GUIState 枚举单例,存储一样JavaFX的对象,如果Stage,Scene,HostService,系统托盘等。

  7. PropertyReaderHelper 配置读取工具。

  8. ResourceBundleControl 支持自定编码的ResouceBundle,针对I18N很有用。

  9. SplashScreen 默认启动动画界面。

springboot-javafx-support中有一些约定:

  1. 资源(fxmlcssi18n)放在resources中,目录结构跟View类的包目录结构一致。

  2. 将View类名的"View"去掉后所有字母转为小写作为资源的名称。

当然这些约定可以通过@FXMLView注解中的属性来调整。


public @interface FXMLView {  String value() default "";  String[] css() default {};  String bundle() default "";  String encoding() default "ISO-8859-1";  String title() default "";  String stageStyle() default "UTILITY";}

到目前为止还看不到springboot-javafx-support中spring的影子,接下来通过一个例子来展现一下springboot-javafx-support的魅力。

这里通过两个视图切换作为例子:

调整之前的视图,新增调整到Hi视图的按钮,并将视图跟ViewController绑定,处理toHi事件。


<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.112"   xmlns:fx="http://javafx.com/fxml/1"  fx:controller="example.ViewController">   <children>      <Label layoutX="99.0" layoutY="109.0" prefHeight="34.0" prefWidth="394.0" text="Hello World!">         <font>            <Font size="26.0" />         </font>      </Label>      <Button layoutX="99.0" layoutY="169.0" prefHeight="34.0" prefWidth="150.0" text="Hi" onAction="#toHi"/>   </children></Pane>

同样的Hi视图也绑定到ViewController中


<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.112"   xmlns:fx="http://javafx.com/fxml/1"  fx:controller="example.ViewController">   <children>      <Label layoutX="99.0" layoutY="109.0" prefHeight="34.0" prefWidth="394.0" text="Hi IT青年!">         <font>            <Font size="26.0" />         </font>      </Label>      <Button layoutX="99.0" layoutY="169.0" prefHeight="34.0" prefWidth="150.0" text="Hello" onAction="#toHello"/>   </children></Pane>

这里跟之前写过的一些案例有点不同的时候,fxml和controller的关系是多对一的关系。(之前的案例都是一对一的关系)。

springboot-javafx-support组件的关系图如下:

JavaFX桌面应用-SpringBoot + JavaFX_java

ViewController中,将Helloworld和Hi视图注入进来,单点击按钮的时候进行视图切换。

JavaFX桌面应用-SpringBoot + JavaFX_java_02

ViewController源码如下:


这里的@Autowired是Spring的注解,由于@FXMLController主键的Controller是Spring的bean,所以这里完全可以像spring开发一样编写代码。

如:@Autowired private FooService fooService;

FoorService是一个简单的接口




public interface FooService {  String service();}

其实现:


@Servicepublic class FooServiceImpl implements FooService {  @Override  public String service() {    return "Foo Service";  }}

springboot-javafx-support提供了默认的启动界面,当然也开放了自定义界面的入库。

自定义启动节目只需要继承SplashScreen并重写相关方法即可,这里简单的替换启动图案:







public class CustomLoadingView extends SplashScreen {  @Override  public String getImagePath() {    return "/images/logo.png";  }}

在启动类中指定启动界面:


@SpringBootApplicationpublic class App extends AbstractJavaFxApplicationSupport {  public static void main(String[] args) {    launch(App.class, HelloworldView.class, new CustomLoadingView(), args);  }}

这样启动界面就不再是之前的样子

JavaFX桌面应用-SpringBoot + JavaFX_java_03

springboot-javafx-support提供了一些案例,包括:

  1. 如何加载css

  2. 如何使用i18n

  3. 如何打开视图

等等。

有兴趣的话可以看看,GitHub传送门

https://github.com/roskenet/spring-javafx-examples

另外附送 springboot-javafx-support 的GitHub地址

https://github.com/roskenet/springboot-javafx-support


编程小号
上一篇 2025-03-24 17:01
下一篇 2025-03-20 10:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/26320.html