前言

前几天,基友找我让我帮他做个超市收银系统桌面应用(java)。也是为了试试手,我就答应了,看到以前用的是swing。现在换个方法,用javafx做一个按钮跳转界面的功能。也算是对这一年多桌面应用学习的进步总结。

环境搭建

使用的是IntelliJ IDEA,直接搭建springboot。
搭建完之后,视图:
在这里插入图片描述
porn.xml中主要是配置这两块

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

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

代码

接下来就是直接写代码了。因为有两个界面,我这里都是直接在fxml上做界面,因为可以直接使用javafx SceneBuilder制作,非常方便。
第一个fxml是两个按钮的界面:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>


<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.example.button_demo.controller.ButtonDemoController">
   <children>
      <Button fx:id="startBtn" onAction="#start" layoutX="116.0" layoutY="174.0" mnemonicParsing="false" prefHeight="41.0" prefWidth="131.0" text="开始游戏" />
      <Button onAction="#close" layoutX="366.0" layoutY="174.0" mnemonicParsing="false" prefHeight="41.0" prefWidth="131.0" text="结束游戏" />
   </children>
</AnchorPane>

第二个是点击 开始游戏 按钮跳转的界面,是个空界面,什么都没有:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane xmlns="http://javafx.com/javafx"
            xmlns:fx="http://javafx.com/fxml"
            fx:controller="com.example.button_demo.controller.NewWindowController"
            prefHeight="200.0" prefWidth="300.0">
</AnchorPane>

而且要有相对应的view类对应

package com.example.button_demo.view;

import de.felixroske.jfxsupport.AbstractFxmlView;
import de.felixroske.jfxsupport.FXMLView;

@FXMLView(value = "/fxml/Button.fxml")
public class ButtonDemoView extends AbstractFxmlView {
}

package com.example.button_demo.view;

import de.felixroske.jfxsupport.AbstractFxmlView;
import de.felixroske.jfxsupport.FXMLView;

@FXMLView(value = "/fxml/NewWindow.fxml")
public class NewWindowView extends AbstractFxmlView {
}

比较重要的是@FXMLView这里value只能扫描到resource包,如果你像我一样在resource下创建了一个新的fxml包(因为可能以后还会放mapper等xml文件,方便区分)一定要把path写对

后面就是比较重要的controller类了:
第一个就是两个按钮界面的控制类:

package com.example.button_demo.controller;

import com.example.button_demo.ButtonDemoApplication;
import com.example.button_demo.view.NewWindowView;
import de.felixroske.jfxsupport.FXMLController;
import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.stage.Modality;
import javafx.stage.Stage;

@FXMLController
public class ButtonDemoController {
    //开始游戏按钮
    public Button startBtn;

    //开始游戏
    public void start(ActionEvent actionEvent) {
        Stage stage = (Stage) startBtn.getScene().getWindow();
        stage.close();
        ButtonDemoApplication.showView(NewWindowView.class, Modality.NONE);
    }

    //结束游戏
    public void close(ActionEvent actionEvent) {
        System.exit(0);
    }
}

第二个新界面啥都没有,所以controller类是空的

package com.example.button_demo.controller;
import de.felixroske.jfxsupport.FXMLController;

@FXMLController
public class NewWindowController {
}

运行视图

双按钮
新界面

结语

之所以用的是 开始游戏,结束游戏 是为了和我一年多前写的做出对比。

这是当年用swing写的,如果有需要也可以看看:
Java建立窗口并通过按钮实现窗口跳转

这是javafx scene builder 的下载地址
https://www.oracle.com/java/technologies/javafxscenebuilder-1x-archive-downloads.html.

如果有问题的话,可以直接评论或者私信问我

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐