前言
最近转移了系统平台,用上了Ubuntu1804版本系统,原来用C#写的Windows窗体软件也不能用了,并且本身在班级上每周都须要收做业,因此写了这个软件。这篇博客主要记录这个JavaFX应用的编写过程以及怎么使用,而且不会涉及代码。代码部分在github上面,而且都有详细的中文注释,但愿这篇博客能为喜欢JavaFX的伙伴提供一些参考资料。本程序涉及的知识点有一些基础组件和布局的使用,组件用到Label,Button,布局用到StackPane,BorderPane,GridPane,VBox,ScrollPane,还有Excel文件的读取。这个应用程序是使用的MVC模型设计的(这个简单程序没有用到模型model),使用的JDK版本是1.8,使用maven管理项目,IDE使用的是IntelliJ Idea。若是喜欢请帮我Mark个Star,Github连接地址:https://github.com/quanbisen/homeworkstatisticgit
内容
内容我把它分为五部分:github
- 逻辑分析
- 功能需求
- UI设计
- 逻辑处理
- 测试
1. 逻辑分析
在通常状况下,班级每一次的做业都会创建一个文件夹存放每一位同窗提交的做业(word文件或文件夹),并且每一位同窗提交的文件命名都是有规定的格式,咱们老师要求是专业班级+学号+姓名,例如计科16409小涵,其中“计科164”是专业班级,“09”是班级内的学号,”小涵“是姓名,学号在这个班级里是惟一的。这样,要作一个未交做业统计就只须要列出存放做业文件夹内的全部文件或文件夹,而后根据学号与班级的名单进行比对便可得出未交做业的同窗,最后把未交做业的同窗名单存到做业文件夹的一个.txt文件中便可。apache
2. 功能需求
根据逻辑分析,功能需求应该要有如下:maven
- 提供班级名单的导入
- 提供做业的目录选择
- 提供统计结果的显示
- 提供统计结果的保存
- 提供业务逻辑的提示
3. UI设计
整个程序须要用到的组件很少,针对须要作业务逻辑的提示,因此根容器选用了StackPane,在StackPane最低下放置程序的主界面布局GridPane,当须要进行业务逻辑的提示时,就往StackPane上面添加一个Label组件显示业务逻辑的提示信息,提示信息实际上是经过播放淡出Fade动画实现的,在动画播放完成后须要把这个提示信息的Label移除,因此主界面的设计主要是设计在GridPane容器上。布局
针对功能需求中的班级名单导入和做业目录选择,能够为班级名单导入和做业目录选择各占GridPane的一行,每一行都有各占GridPane的三列,第一列使用Label组件做为提示,第二列使用TextField组件做为选择的路径显示(TextField组件是输入文本框,能够本身输入路径),第三列使用带图片的Label做为路径选择的按钮。设计的效果以下图所示:测试
针对功能需求中统计结果的显示和保存,能够为统计结果显示和保存各占GridPane的一行。统计结果的显示占GridPane的三列,第一列使用Label组件做为提示,第二列使用了一个ScrollPane容器包裹VBox容器做为统计结果的显示(有多少位同窗没交就往VBox容器添加多少个Label组件做显示),第三列使用了一个Button组件做为统计的触发按钮;统计结果的保存只须要使用一个Label组件设置一些背景样式,占据GridPane的一行,由于这个Label占据了一行,为了居中显示美化,在fxml文件中指定了这一列占据GridPane的三列(GridPane.columnSpan="3")。设计的效果以下图所示:动画
程序的最终主界面以下图所示:url
4. 逻辑处理
整个程序的逻辑处理很简单,可分为四步,分别为选择班级excel文件、选择班级做业目录、进行做业统计和统计完成后进行保存。整个程序的操做流程可用下图描述:spa
4.1 选择班级excel文件.net
选择班级excel文件的目的是使程序得到班级名单进行匹配的数据源,这个操做的逻辑处理只是获取文件的句柄,并不涉及读取,读取在后面进行统计的时候再执行。因此这一步的须要用到的知识点只有JavaFX文件选择对话框的使用(FileChooser)以及文件选择完成后对TextFiel组件的文本更新操做。具体的流程图以下所示:
4.2 选择班级做业目录
选择班级做业目录的目的是能够列出目录下的上交做业来做比对统计,它和选择班级excel文件的逻辑处理大体相同,只是换成了使用JavaFX目录选择对话框(DirectoryChooser),并且不须要设置其它的文件筛选器这些,只须要设置标题方便理解就能够了。在选择了目录后更新TextField组件的文本信息。具体的流程操做以下所示:
4.3 做业统计
做业统计是本程序设计的核心,它须要完成的逻辑处理有对选择的excel文件读取、对做业目录下的文件或文件夹进行学号提取、把excel文件读取的班级学生名单学号和做业目录下的文件学号进行比对贴“未交”标签和对贴了“未交”标签的学生进行GUI显示。具体的流程图以下所示:
- excel文件读取
excel文件的读取须要用到第三方包,分别是commons-collections-3.2.一、org.apache.poi-3.六、org.apache.poi-ooxml-3.6和org.apache.poi-ooxml-schemas-3.6,详见maven的配置文件pom.xml中的dependencies标签,这里须要注意的是不一样版本的包读取excel文件的方法会有差别。读取的逻辑处理能够用如下流程图描述:
- 做业目录下的文件或文件夹学号提取
学号提取是根据文件有固定的命名格式,提取文件夹下面的全部学号字符串,如计科16409小涵,只须要提取从第四个字符开始到第六个字符结束便可获得所需的学号信息。其大体的逻辑处理可用如下流程图描述:
- 学号比对贴标签
学号比对贴标签还须要把读取到的excel文件行集合提取学号和姓名存储到map数据集,组成<Key,Value>映射,其中Key为学号,Value为姓名。而后使用map中的keySet数据集与目录下的文件提取的fileKeySet进行比对。其大体的逻辑处理可用如下流程图描述:
- GUI显示贴了“未交”标签的学生
GUI显示贴了“未交”标签的学生是为贴了标签的学生的信息建立一个Label组件,而后添加到VBox容器便可,最后还有一个提示多少人未交。其大体的逻辑处理可用如下流程图描述:
4.4 保存
保存是把VBox容器中的Label信息存储到做业目录下的.txt文件便可。首先建立.txt文件,而后取出VBox容器的组件,遍历提取组件信息写入文件,最后提示文件写入成功。其大体的逻辑处理可用如下流程图描述:
5. 测试
测试部分这里只列举功能部分测试,UI提示部分就不一一展现了。测试的班级Excel文件内容以下图所示:
做业文件夹下的文件以下图所示:
其中学号为0四、06和07的同窗未交做业。
下面运行程序,选择班级excel文件路径和做业目录,单击“统计”按钮获得统计结果。
最后单击保存把信息存储到“未交做业名单.txt”