解解解的博客二
寫在開頭:個人項目結束的后一周緊接着就來了結對編程,真是充實的學習生活呢(滿臉寫着高興)。結對的的隊友是427同學,clap~
項目需求:
1、用戶注冊功能。用戶提供手機號碼,點擊注冊將收到一個注冊碼,用戶可使用該注冊碼完成注冊;
2、用戶完成注冊后,界面提示設置密碼,用戶輸入兩次密碼匹配后設置密碼成功。密碼6-10位,必須含大小寫字母和數字。用戶在登錄狀態下可修改密碼,輸入正確的原密碼,再輸入兩次相同的新密碼后修改密碼成功;
3、密碼設置成功后,跳轉到選擇界面,界面顯示小學、初中和高中三個選項,用戶點擊其中之一后,提示用戶輸入需要生成的題目數量;
4、用戶輸入題目數量后,生成一張試卷(同一張卷子不能有相同題目,題目全部為選擇題),界面顯示第一題的題干和四個選項,用戶選擇四個選項中的一個后提交,界面顯示第二題,...,直至最后一題;
5、最后一題提交后,界面顯示分數,分數根據答對的百分比計算;
6、用戶在分數界面可選擇退出或繼續做題;
7、小初高數學題目要求見個人項目。
看到需求的感想:
Emmmm,第一個需求就不會,我捉摸着就是生成一個隨機數顯示在控制台就可以了吧。簡單。
交互界面我不會寫哇!!但我可以學,也很簡單!
我真是樂觀(盲目的)。
實際開發:
- 交互界面用什么寫?
內心浮現兩個選擇:Swing or web。Swing看起來簡單一些的樣子,畢竟上學期Java寫過一個(雖然那個也不是我自己寫的)。就Swing了!(事后,我為什么要用Swing?界面是在太丑了QAQ)
2.學習了Swing的各個布局,各個部件,心態良好,Swing也不難嘛,上學期早知道自己寫了,哼。
3.正式動手做結對編程項目:用了CardLayout(卡片布局管理器),這種布局比較適合這種比較多頁面切換的程序。個人的感覺就像是做ppt一樣。
卡片布局管理器
CardLayout(卡片布局管理器)能夠幫助用戶實現多個成員共享同一個顯不空間,並且一次只顯示一個容器組件的內容。
CardLayout 布局管理器將容器分成許多層,每層的顯示空間占據整個容器的大小,但是每層只允許放置一個組件。CardLayout 的構造方法如下。
CardLayout():構造一個新布局,默認間隔為 0。
CardLayout(int hgap, int vgap):創建布局管理器,並指定組件間的水平間隔(hgap)和垂直間隔(vgap)。
4.代碼解析
(1)創建P1、P2、P3、P4、P5、P6、P7、P8、P9九個類,這九個類是項目的主要使用的九個界面,也就是九張card。
這九個類繼承JPanel,在構造方法里面寫每個面板的部件。
(2)事件的監聽,在JButton里面添加監聽函數,當捕捉到event的時候,會執行相應的函數。
這段代碼是立即注冊JLabel的監聽函數,采用內部類,實現mouseClicked函數,當監測到鼠標點擊的時候,跳轉到cards2,驗證碼界面。
(3)將card的布局設置為null,采用絕對位置布局(用像素坐標)。
(4)輸入框的監聽函數使用焦點監聽,當鼠標點擊(獲得焦點)和鼠標點擊其他位置(失去焦點)觸發。
(5)密碼框采用JPasswordField,輸入后顯示*號,默認原點,用setEchochar()函數設定符號,這里會有一個問題,JPasswordField設置初始顯示內容也會顯示成*號,要在明文顯示的文字使用setEchoChar('\0');
效果圖:
(6)菜單欄
在登錄頁面設置為不可用,並添加警示框。里面有三項:退出登錄,修改密碼,重新做題。不知為什么一截圖,菜單欄就消失了。放棄。
(7)由於P5(做題頁面),一開始就要顯示第一道題,所以初始化要在P4(選擇類型頁面)的確定按鈕監聽函數里面初始化,說到初始化就不得不說一說Java初始化的問題,下面再說。
(8)一開始寫的代碼是在一個類的主函數里面寫的,當我寫到800行的時候,我意識到了問題的嚴重性,因為我實在想不出來Button的名字了。另一方面,代碼的可讀性太差了,所以就將每一個card,緩存賬戶信息,驗證碼部分,將字符串轉換為算式轉換為一個類。這樣每個部分就清晰多了,修改代碼的時候也不用到處找在哪里了。
由於每一個card都是在無參構造函數里面寫的部件,初始化順序給我帶來了好多困惑,這個變量怎么不變??這個部件怎么沒出來??所以我們來復習下Java的初始化順序。
(9)剛完成整體的GUI的時候,真的丑的不忍直視。之后用了美化包,,並且帶上這串神秘代碼,就好看多了。但是相比web做出來的還是丑了點,也可能是我個人的問題吧,所以為什么要用Java寫GUI呢?(因為cai啊)可能想zhm同學說的一樣:不怪你,Java的上限不高。
Button優化,邊框優化,下拉框優化真好。失去焦點的時候會變透明~
感想:
- 寫的很高興,編代碼真有意思。
- 還是實際編程更能提升能力。
- Deadline威力很強大。
- 其實一周就完成了,連續幾天凌晨,改到兩周我心態有點崩。
附:各個頁面截圖
- 登錄
2.注冊
3.選擇類型
4.做題
5.得分
6.修改密碼
7.還有幾個界面,沒有未注冊的手機號進不去了哈哈哈哈哈哈哈哈哈哈哈哈,其實是我懶。拜了個拜~