资讯专栏INFORMATION COLUMN

JavaFx系列教程之一:JavaFx+Springboot+Maven 开发打包教程

Coding01 / 1545人阅读

摘要:最近在用开发窗体程序,并且以后打算把所有的窗体软件切换到上面,并且还想用的各种好处,集成了就可以愉快的用各种服务了。最重要的是打包工具。由于我是,一般用和,执行命令会看到打包成了和两种类型的安装包。由于没有计算机,所以还不知道打包成的状态。

最近在用 JavaFx 开发窗体程序,并且以后打算把所有的窗体软件切换到 JavaFx 上面,并且还想用 springboot 的__各种好处,集成了 springboot 就可以愉快的用各种服务了。所以就有了这个博客。。。
我本来想自己写一个 javafx-spring-boot-starter 的,其原理也是很简单地,利用 springbootaware 就可以了。但是发现德国这哥们已经写了一个,就变懒了。哎,没办法,我真的是太懒了。
本次的代码Github 地址:https://github.com/spartajet/...
1. 介绍

javafxspringboot支持的库,官方是没有的,开源有一大堆。我采用的是springboot-javafx-support 地址是:springboot-javafx-support .这个库文档比较全,比较详细,文档地址:Spring Boot and JavaFx8 .

springboot必须用maven,否则那简直是灾难。最重要的是打包工具。我用的是JavaFX Maven Plugin 地址:JavaFX Maven Plugin

2. Maven 配置

maven 主要配置依赖库和插件,具体如下:


    
        org.springframework.boot
        spring-boot-starter-actuator
        ${spring.boot.version}
    
    
        org.springframework.boot
        spring-boot-starter
        ${spring.boot.version}
    
    
        org.springframework.boot
        spring-boot-starter-log4j2
        ${spring.boot.version}
    
    
        org.springframework.boot
        spring-boot-starter-test
        ${spring.boot.version}
        test
    
    
        de.roskenet
        springboot-javafx-support
        ${springboot-javafx-support.version}
    


    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
        
            com.zenjava
            javafx-maven-plugin
            
                com.spartajet.fxboot.demo.MainController
                Spartajet
            
        
    

其中,比较重要的是:com.spartajet.fxboot.demo.MainController 这个是打包的时候的 main 类。Spartajet是组织名称。

3. Javafx 集成springboot 3.1 创建 FXML 布局文件

可以用 SceneBuilder 工具创建 FXML 文件,我还是建议自己写 FXML,刚开始可能不习惯,慢慢习惯就好了。但是,我墙裂建议布局和样式分开,fxml 只管布局,css 只管样式。


3.2 MainStageController

每一个 fxml 布局文件对应一个 controller,要在 fx:controller 里面设置。

/**
 * @description
 * @create 2017-05-20 下午1:55
 * @email spartajet.guo@gmail.com
 */
@FXMLController
public class MainStageController implements Initializable {

    /**
     * Called to initialize a controller after its root element has been
     * completely processed.
     *
     * @param location  The location used to resolve relative paths for the root object, or
     *                  null if the location is not known.
     * @param resources The resources used to localize the root object, or null if
     */
    public void initialize(URL location, ResourceBundle resources) {
        
    }
}

实现Initializable接口,加上@FXMLController注解,其实很简单的。看看@FXMLController的源码:

@Component
@Retention(RetentionPolicy.RUNTIME)
public @interface FXMLController {

}
3.3 MainStageView

这个是比较特殊的,在普通的 javafx 里面没有这个东西,但是按照 MVC 的角度来讲,业务和试图分离,还是很有必要的。

@FXMLView(value = "/view/MainStage.fxml")
public class MainStageView extends AbstractFxmlView {
}

添加的是注解@FXMLView,源码如下:

@Component
@Retention(RetentionPolicy.RUNTIME)
public @interface FXMLView {
    String value() default "";
    String[] css() default {}; 
    String bundle() default "";
}

从这里也能看到,可以在这里注入 css 样式文件以及 bundle 文件。还是比较方便的,我是在 fxml 里面注入的 css 文件,都是可以的。
其中还继承了 AbstractFxmlView 的抽象类,方法比较少,最重要的是getView方法,返回的是Node对象。然后就可以随意的用这个视图了。

3.3 MainController
@SpringBootApplication
public class MainController extends AbstractJavaFxApplicationSupport {

    /**
     * The entry point of application.
     *
     * @param args the input arguments
     */
    public static void main(String[] args) {
        launchApp(MainController.class, MainStageView.class, args);
    }

    /**
     * Start.
     *
     * @param stage the stage
     *
     * @exception Exception the exception
     */
    @Override
    public void start(Stage stage) throws Exception {
        super.start(stage);
    }
}

继承自AbstractJavaFxApplicationSupport 可以看到源码,典型的Aware。然后就可以运行了。

可以看到

这个是启动动画。可以自定义启动动画,个人认为,启动动画还是很有必要的,因为 springboot 启动费时还是比较多的,来个启动动画,逼格满满的。

3.4 启动动画
/**
 * @description
 * @create 2017-05-20 下午2:54
 * @email spartajet.guo@gmail.com
 */
public class CustomSplash extends SplashScreen {
    /**
     * Use your own splash image instead of the default one
     *
     * @return "/splash/javafx.png"
     */
    @Override
    public String getImagePath() {
        return super.getImagePath();
    }

    /**
     * Customize if the splash screen should be visible at all
     *
     * @return true by default
     */
    @Override
    public boolean visible() {
        return super.visible();
    }
}

最常用的就是这两个方法了,一个是更换照片,另一个是是否显示启动动画。

4.0 打包

JavaFX-Maven-Plugin可以打包 jar、native、webbundle、key-store这些。
由于我是 mac,一般用 jar和 native,执行命令mvn jfx:native 会看到打包成了pkg 和 dmg 两种类型的安装包。并且都是180M 左右。由于没有 windows 计算机,所以还不知道打包成 exe 的状态。这么大的包,主要是因为 java 的 jdk 问题,模块化以后就好了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71031.html

相关文章

  • Java™ 教程(匿名类)

    匿名类 匿名类可以使你代码更简洁,它们使你能够同时声明和实例化一个类,它们就像局部类,除了它们没有名称,如果你只需要使用局部类一次,请使用它们。 声明匿名类 虽然局部类是类声明,但匿名类是表达式,这意味着你在另一个表达式中定义该类,以下示例HelloWorldAnonymousClasses在局部变量frenchGreeting和spanishGreeting的初始化语句中使用匿名类,但使用局部类...

    xietao3 评论0 收藏0
  • JavaFX 8 下简化自定义控件的外部调用以及流式布局示例

    摘要:故可采用自定义控件的方式简化外部的代码调用。自定义控件的设计版本之后,提供写法,此时要求必须继承自节点对象,使用加载时,必须调用方法。 「博客搬家」 原地址: 简书 原发表时间: 2017-05-21 有一个项目,需要模拟数千台设备的工作情况,这数千个设备分为若干组,每组 100 台。故需要设计一款 GUI 程序,包含 100 个自定义控件,模拟一组设备的工作情况,通过 List...

    MartinHan 评论0 收藏0
  • 「译」Maven 集成 JavaFX 8 以及 <fx:root> 问题探讨

    摘要:本文探讨使用构建集成的可执行程序的方法,以及根节点问题。而使用后,可指导类作为根节点,避免了嵌套的情况。文件设计如下文件同时指明了根节点的类型,资源文件对应的设计如下此时可实现开始时,纯代码方式的自定义控件设计。 「博客搬家」 原地址: 简书 原发表时间: 2017-05-22 上一篇文章探讨了使用 IntelliJ IDEA 创建 JavaFX 工程,进而开发了所需应用程序。更...

    joywek 评论0 收藏0
  • JavaFX 学习笔记——窗口与控件

    摘要:创建窗口添加类为元素间空隙与主窗口创建过程相同,新建布局及控件,最后使用的方法显示出来。设置主窗口中的按钮事件,点击按钮后会显示一个窗口。这时我们可以通过函数设置窗口关闭时触发的事件在关闭窗口时,首先执行这一事件处理函数,再将窗口关闭。 前言 如今比较流行的桌面gui框架有WPF、WinForm、Qt、javafx等。其中WPF和WinForm目前还只能在运行Winsows上。Qt(w...

    Pocher 评论0 收藏0
  • Java™ 教程(目录)

    Java™ 教程 Java教程是为JDK 8编写的,本页面中描述的示例和实践没有利用在后续版本中引入的改进。 Java教程是希望使用Java编程语言创建应用程序的程序员的实用指南,其中包括数百个完整的工作示例和数十个课程,相关课程组被组织成教程。 覆盖基础知识的路径 这些教程以书籍的形式提供,如Java教程,第六版,前往Amazon.com购买。 入门 介绍Java技术和安装Java开发软件并使用...

    lifesimple 评论0 收藏0

发表评论

0条评论

Coding01

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<