• SpringBoot整合JavaFx


    有兴趣使用SpringBoot开发JavaFx应用的朋友可以看一下这个随笔;

    SpringBoot版本:2.1.15.RELEASE

    JavaFx依赖:

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

    SpringBoot启动类需要稍加改造:

    import com.maxinhai.diary.view.IndexFxmlView;
    import com.maxinhai.diary.view.StartUpPage;
    import de.felixroske.jfxsupport.AbstractJavaFxApplicationSupport;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /**
     * Mood Diary应用启动入口
     */
    @SpringBootApplication
    public class DiaryApplication extends AbstractJavaFxApplicationSupport {
    
        public static void main(String[] args) {
            // 原SpringBoot启动方法
            //SpringApplication.run(DiaryApplication.class, args);
            launch(DiaryApplication.class, IndexFxmlView.class, new StartUpPage(), args);
        }
    
    }

    上面是加了启动动画的启动方法

    fxml文件存放到resources文件加下即可:

    fxml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <?import javafx.scene.control.Button?>
    <?import javafx.scene.control.Label?>
    <?import javafx.scene.layout.AnchorPane?>
    <?import javafx.scene.text.Font?>
    
    <?import javafx.scene.layout.VBox?>
    <?import javafx.scene.layout.HBox?>
    <?import javafx.geometry.Insets?>
    <AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.172-ea"
                xmlns:fx="http://javafx.com/fxml/1"
                stylesheets="@/css/index.css"
                fx:controller="com.maxinhai.diary.controller.IndexController">
        <children>
            <fx:include source="menuBar.fxml"/>
            <Label fx:id="label" layoutX="20.0" layoutY="20.0" text="hello">
                <font>
                    <Font size="61.0"/>
                </font>
            </Label>
            <VBox layoutX="20.0" layoutY="100.0">
                <children>
                    <HBox>
                        <children>
                            <Button fx:id="btn" layoutX="20.0" layoutY="250.0" mnemonicParsing="false" text="Button" onAction="#btnClick" prefHeight="22.0" prefWidth="100.0">
                                <HBox.margin>
                                    <Insets top="5.0" />
                                </HBox.margin>
                                <padding>
                                    <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                                </padding>
                            </Button>
                            <Label prefHeight="22.0" prefWidth="40.0" />
                            <Button fx:id="btnLogin" layoutX="80.0" layoutY="250.0" mnemonicParsing="false" text="Login" onAction="#btnToPage" prefHeight="22.0" prefWidth="100.0">
                                <HBox.margin>
                                    <Insets top="5.0" />
                                </HBox.margin>
                                <padding>
                                    <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                                </padding>
                            </Button>
                            <Label prefHeight="22.0" prefWidth="40.0" />
                            <Button fx:id="listView" layoutX="160.0" layoutY="250.0" mnemonicParsing="false" text="toListView" onAction="#btnToListViewPage" prefHeight="22.0" prefWidth="100.0">
                                <HBox.margin>
                                    <Insets top="5.0" />
                                </HBox.margin>
                                <padding>
                                    <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                                </padding>
                            </Button>
                        </children>
                    </HBox>
                    <HBox fx:id="hBox1" >
                        <children>
                            <Button fx:id="tableView" layoutX="240.0" layoutY="250.0" mnemonicParsing="false" text="toTableView" onAction="#btnToTableViewPage" prefHeight="22.0" prefWidth="100.0">
                                <HBox.margin>
                                    <Insets top="5.0" />
                                </HBox.margin>
                                <padding>
                                    <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                                </padding>
                            </Button>
                            <Label prefHeight="22.0" prefWidth="40.0" />
                            <Button fx:id="btnToMenuBar" layoutX="320.0" layoutY="250.0" mnemonicParsing="false" text="btnToMenuBar" onAction="#btnToMenuBar" prefHeight="22.0" prefWidth="100.0">
                                <HBox.margin>
                                    <Insets top="5.0" />
                                </HBox.margin>
                                <padding>
                                    <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                                </padding>
                            </Button>
                            <Label prefHeight="22.0" prefWidth="40.0" />
                            <Button fx:id="btnToDiaryList" layoutX="400.0" layoutY="250.0" mnemonicParsing="false" text="btnToDiaryList" onAction="#btnToDiaryList" prefHeight="22.0" prefWidth="100.0">
                                <HBox.margin>
                                    <Insets top="5.0" />
                                </HBox.margin>
                                <padding>
                                    <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                                </padding>
                            </Button>
                        </children>
                    </HBox>
                    <HBox fx:id="hBox2" >
                        <children>
                            <Button fx:id="1" layoutX="240.0" layoutY="250.0" mnemonicParsing="false" text="计算器" onAction="#btnToCalculator" prefHeight="22.0" prefWidth="100.0">
                                <HBox.margin>
                                    <Insets top="5.0" />
                                </HBox.margin>
                                <padding>
                                    <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                                </padding>
                            </Button>
                            <Label prefHeight="22.0" prefWidth="40.0" />
                            <Button fx:id="2" layoutX="320.0" layoutY="250.0" mnemonicParsing="false" text="时钟" onAction="#btnToShowTime" prefHeight="22.0" prefWidth="100.0">
                                <HBox.margin>
                                    <Insets top="5.0" />
                                </HBox.margin>
                                <padding>
                                    <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                                </padding>
                            </Button>
                            <Label prefHeight="22.0" prefWidth="40.0" />
                            <Button fx:id="3" layoutX="400.0" layoutY="250.0" mnemonicParsing="false" text="btnToDiaryList" onAction="#btnToDiaryList" prefHeight="22.0" prefWidth="100.0">
                                <HBox.margin>
                                    <Insets top="5.0" />
                                </HBox.margin>
                                <padding>
                                    <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
                                </padding>
                            </Button>
                        </children>
                    </HBox>
                </children>
            </VBox>
        </children>
    </AnchorPane>

     FxmlView 界面试图类创建:

    import de.felixroske.jfxsupport.AbstractFxmlView;
    import de.felixroske.jfxsupport.FXMLView;
    
    @FXMLView(value = "/fxml/index.fxml",title = "index",bundle = "i18n.index",encoding = "utf-8")
    public class IndexFxmlView extends AbstractFxmlView {
    
    }

    FxmlController 界面操作方法泪创建:

    import com.maxinhai.diary.DiaryApplication;
    import com.maxinhai.diary.view.*;
    import de.felixroske.jfxsupport.FXMLController;
    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.fxml.Initializable;
    import javafx.scene.control.Button;
    import javafx.scene.control.Label;
    
    import java.net.URL;
    import java.util.ResourceBundle;
    
    /**
     * 首页控制器
     */
    @FXMLController
    public class IndexController implements Initializable {
    
        @FXML
        private Button btn;
    
        @FXML
        private Button btnLogin;
    
        @FXML
        private Button listView;
    
        @FXML
        private Label label;
    
        private ResourceBundle resourceBundle;
    
        @Override
        public void initialize(URL location, ResourceBundle resources) {
            resourceBundle = resources;
        }
    
        @FXML
        public void btnClick(ActionEvent actionEvent) {
            label.setText("helloWorld");
        }
    
    
        /**
         * 跳转场景
         * @param actionEvent
         */
        @FXML
        public void btnToPage(ActionEvent actionEvent) {
            DiaryApplication.showView(ImageFxmlView.class);
        }
    
        /**
         * 跳转场景
         * @param actionEvent
         */
        @FXML
        public void btnToListViewPage(ActionEvent actionEvent) {
            DiaryApplication.showView(ListViewFxmlView.class);
        }
    
        /**
         * 跳转场景
         * @param actionEvent
         */
        @FXML
        public void btnToTableViewPage(ActionEvent actionEvent) {
            DiaryApplication.showView(TableViewFxmlView.class);
        }
    
        /**
         * 跳转场景
         * @param actionEvent
         */
        @FXML
        public void btnToMenuBar(ActionEvent actionEvent) {
            DiaryApplication.showView(MenuBarFxmlView.class);
        }
    
        /**
         * 跳转场景
         * @param actionEvent
         */
        @FXML
        public void btnToDiaryList(ActionEvent actionEvent) {
            DiaryApplication.showView(DiaryListFxmlView.class);
        }
    
        /**
         * 跳转场景
         * @param actionEvent
         */
        @FXML
        public void btnToCalculator(ActionEvent actionEvent) {
            DiaryApplication.showView(CalculatorFxmlView.class);
        }
    
        @FXML
        public void btnToShowTime(ActionEvent actionEvent) {
            DiaryApplication.showView(ShowTimeFxmlView.class);
        }
    
    }

    StartUpPage启动动画类:

    import com.maxinhai.diary.config.Constant;
    import de.felixroske.jfxsupport.SplashScreen;
    import javafx.scene.Parent;
    import javafx.scene.control.ProgressBar;
    import javafx.scene.image.ImageView;
    import javafx.scene.layout.VBox;
    
    /**
     * 应用启动页
     */
    public class StartUpPage extends SplashScreen {
    
    
        @Override
        public Parent getParent() {
            final ImageView imageView = new ImageView(getClass().getResource(getImagePath()).toExternalForm());
            final ProgressBar splashProgressBar = new ProgressBar();
            splashProgressBar.setPrefWidth(imageView.getImage().getWidth());
            final VBox vbox = new VBox();
            vbox.getChildren().addAll(imageView, splashProgressBar);
            return vbox;
        }
    
        /**
         * 是否显示: true显示
         * @return
         */
        @Override
        public boolean visible() {
            return true;
        }
    
        /***
         * 启动页图片
         * @return
         */
        @Override
        public String getImagePath() {
            // 图片路径
            return Constant.START_UP_IMAGE_URL;
        }
    }

     application.properties

    server.port=10010

    毕竟是SpringBoot项目启动端口还是要配置的

    要是嫌弃上面fxml、controller里的代码太多,可以删除里面的大多数节点,简单跑起来

  • 相关阅读:
    [2016北京集训试题15]项链-[FFT]
    [agc008E]Next or Nextnext-[dp+思考题]
    [agc011E]Increasing Numbers-[思考题]
    [2016北京集训试题14]股神小D-[LCT]
    [2016北京集训试题6]mushroom-[bitset]
    [2016北京集训试题6]魔法游戏-[博弈论-sg函数]
    [arc081F]Flip and Rectangles-[黑白染色]
    [arc072F]Dam-[单调队列]
    【CF787D】遗产(Legacy)-线段树-优化Dijkstra(内含数据生成器)
    【CF373C】计算袋鼠是愉快的(Counting Kangaroos is Fun)-贪心
  • 原文地址:https://www.cnblogs.com/mxh-java/p/14319230.html
Copyright © 2020-2023  润新知