前言
最近轉移了系統平臺,用上了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」