热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Springboot+JavaFx实现进销存系统

Springboot+JavaFx实现进销存系统,Go语言社区,Golang程序员人脉社

准备写一个简单的进销存软件,记录一下遇到的问题的和每天的工作。
初步的想法是用Spring Boot搭建后端,MyBatis进行数据库操作;软件运行在Windows上,使用JavaFx来进行图形界面编程,如果可行的话,使用些好看的开源控件库美化一下。Maven做依赖管理。开发工具使用idea,数据库直接建在我的云服务器上部署好的mysql上,远程连接进行操作。
有时间的话再加上会接着写安卓端、小程序端或者网页版。网页版可能性比较大,因为想看看若依框架

1

需求分析,建数据库。

2. JavaFx

2.0 项目结构

在这里插入图片描述

2.1 依赖

关于Javafx的各种讲解和介绍很多,看了很多有了大致了解,这里使用maven管理该项目,新建项目后,加入相关依赖主要是openjfx的依赖,其他的可以根据自己的需要进行添加,我这里主要加了okhttp的依赖进行网络请求,需要注意的是okhttp中需要剔除安卓部分。


            org.openjfx
            javafx-controls
            13.0.2


            org.openjfx
            javafx-fxml
            13.0.2
 
 
            com.squareup.okhttp3
            okhttp
            4.7.2
            compile
            
                
                    com.google.android
                    android
                
            
 

2.2 启动类

作为进销存系统,需要登陆界面和操作界面,所以将启动类进行了一些修改,start()和main()函数是保持不变的,将sence设置为静态数据,同时将FXMLLoader独立出来作为一个单独的函数。并另设一个setRoot函数,进行界面的切换。具体代码如下

public class App extends Application {
    private static Scene scene;

	@Override
    public void start(Stage stage) throws IOException {
        Parent root = loadFXML("primary");
        //初始化界面
        scene = new Scene(root);
        stage.setScene(scene);
        stage.setTitle("进销存系统");
        stage.setResizable(false);//设置窗体不可改变大小
        stage.show();
    }
    static void setRoot(String fxml) throws IOException {
        Parent root = loadFXML(fxml);
        if(fxml.equals("secondary")){
           //转换到第二界面是可以进行一些其他操作
        }
        scene.setRoot(root);
    }
    public static Parent loadFXML(String fxml) throws IOException {
        FXMLLoader fxmlLoader = new FXMLLoader(App.class.getResource(fxml + ".fxml"));
        return fxmlLoader.load();
    }
    public static void main(String[] args) {
        launch();
    }
}

2.3控件的使用

可以使用scene builder进行可视化的界面编写
使用主标签中使用fx:controller设置界面对应的控制器


2.3.1 button

在fxml文件中加入一个button标签,设置点击时对应调用的函数

在org.example.SecondaryController中具体实现addtoChuhuoList函数

2.3.2 choiceBox

choiceBox的设置操作和button类似,不同的是他作为下拉列表需要进行数据装配。这里装载到下拉列表中的全部是String。

private ChoiceBox choiceBox;//控件定义,对应fxml文件中设置的id
String[] s = new String[size];//定义字符串数组
//自行装载字符串数据
choiceBox.getItems().setAll(s);//完成装载,便可以正常显示
//需要更改下拉选项时,改变s中的值即可;

2.3.3 textField

private TextField t;
//获取文本框中输入的内容
String text = t.getValue().toString();
//清空
t.setText("");

2.3.4 tableView

fxml中控件布局的写法


                
                    
                    
                    
                    
                    
                    
                    
                    
                    
                
            

每一个列和表格都有他的id,在具体设置时会用到。
这里使用临时类进行表格数据的储存和装载。

//定义数据列表
public static ObservableList chuhuo_liebiao_data = FXCollections.observableArrayList();
//在合适的地方定义对应实体类
public class linshiHuowu{
	private final SimpleStringProperty tiaoma;
    private final SimpleStringProperty changjia;
    private final SimpleStringProperty xilie;
    private final SimpleStringProperty pinming;
    private final SimpleStringProperty xinghao;
    private final SimpleIntegerProperty guige;
    private final SimpleIntegerProperty shuliang;
    private final SimpleIntegerProperty jiage;
}
//得到的数据新建linshiHuowu对象,并加入到数据列表中
linshiHuowu l = new linshiHuowu();
chuhuo_liebiao_data.add(l);
//数据装配
chuhuo_liebiao_tiaoma.setCellValueFactory(new PropertyValueFactory("tiaoma"));//括号中字段对应实体类linshiHuowu中的属性
            chuhuo_liebiao_changjia.setCellValueFactory(new PropertyValueFactory("changjia"));
            chuhuo_liebiao_xilie.setCellValueFactory(new PropertyValueFactory("xilie"));
            chuhuo_liebiao_pinming.setCellValueFactory(new PropertyValueFactory("pinming"));
            chuhuo_liebiao_xinghao.setCellValueFactory(new PropertyValueFactory("xinghao"));
            chuhuo_liebiao_guige.setCellValueFactory(new PropertyValueFactory("guige"));
            chuhuo_liebiao_jiage.setCellValueFactory(new PropertyValueFactory("jiage"));
            chuhuo_liebiao_shuliang.setCellValueFactory(new PropertyValueFactory("shuliang"));
            //设置删除按钮
            chuhuo_liebiao_shanchu.setCellFactory((col)->{
                TableCell cell = new TableCell<>(){
                    @Override
                    protected void updateItem(String item, boolean empty) {
                        super.updateItem(item, empty);
                        this.setText(null);
                        this.setGraphic(null);

                        if(!empty){
                            Button shanchuButton = new Button("删除");
                            this.setGraphic(shanchuButton);
                            shanchuButton.setOnMouseClicked((me)->{
                                linshiHuowu shanchuH = this.getTableView().getItems().get(this.getIndex());
                                //从数据列表中删除该数据
								this.getTableView().getItems().remove(this.getIndex());
                            });
                        }
                    }
                };
                return cell;
            });
            chuhuo_liebiao.setItems(chuhuo_liebiao_data);

tableView主要参考以下文章JavaFX表格控件TableView高级应用:自动添加ID列、删除操作列、单元格内容个性化渲染
tableView的官方文档翻译
有机会写一篇专门的tableView的各种操作的文章。

2.3.5 弹窗


推荐阅读
  • 欢迎Follow我的GitHub,关注我的CSDN.应用本质上是一个apk包,即一个zip包,可以直接显示其中的内容.通过apk文件,我们可以获知apk的版本信息,so库和第三方 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Retrofit+Rxjava+OkHttp
    为什么80%的码农都做不了架构师?参考:http:duanyytop.github.io20160806Retrofit%E7%94%A8%E6% ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 09 性能优化网络优化
    如何优化一个网络请求呢?相信大家在面试的时候可能会被问到这个问题。今天我其实就是讲述下我知道的一些简单的优化方式,可以帮助大家在面试的过程中得到点基础分数。 ... [详细]
author-avatar
半暖半夏半流年
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有