疑问:为什么要用Java写GUI?


解解解的博客二

 

写在开头个人项目结束的后一周紧接着就来了结对编程,真是充实的学习生活呢(满脸写着高兴)。结对的的队友是427同学,clap~

 

项目需求

1、用户注册功能。用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册;

2、用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功。密码6-10位,必须含大小写字母和数字。用户在登录状态下可修改密码,输入正确的原密码,再输入两次相同的新密码后修改密码成功;

3、密码设置成功后,跳转到选择界面,界面显示小学、初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量;

4、用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目,题目全部为选择题),界面显示第一题的题干和四个选项,用户选择四个选项中的一个后提交,界面显示第二题,...,直至最后一题;

5、最后一题提交后,界面显示分数,分数根据答对的百分比计算;

6、用户在分数界面可选择退出或继续做题;

7、小初高数学题目要求见个人项目。

 

看到需求的感想

Emmmm,第一个需求就不会,我捉摸着就是生成一个随机数显示在控制台就可以了吧。简单。

交互界面我不会写哇!!但我可以学也很简单!

我真是乐观(盲目的)。

 

实际开发:

  1. 交互界面用什么写?

内心浮现两个选择: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做出来的还是丑了点,也可能是我个人的问题吧,所以为什么要用JavaGUI呢?(因为cai啊)可能想zhm同学说的一样:不怪你,Java的上限不高。

 

 

 

 

Button优化,边框优化,下拉框优化真好。失去焦点的时候会变透明~

 

 

 

 

感想:

  1. 写的很高兴,编代码真有意思。
  2. 还是实际编程更能提升能力。
  3. Deadline威力很强大。
  4. 其实一周就完成了,连续几天凌晨,改到两周我心态有点崩。

附:各个页面截图

  1. 登录

 

 

 

2.注册

 

 

 

 

3.选择类型

 

 

 

4.做题

 

 

 

5.得分

 

 

 

 

6.修改密码

 

 

 7.还有几个界面,没有未注册的手机号进不去了哈哈哈哈哈哈哈哈哈哈哈哈,其实是我懒。拜了个拜~

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM