Java第七次作业
(一)学习总结
1.写出事件处理模型中的几个关键词,并通过具体代码实例说明你对事件处理模型的理解。(代码在练习的包里)
(1)事件:就是承载事件源状态改变时的信息对象。java.awt.event包和javax.swing.event包中定义了各种事件类,类名以Event结尾。
(2)监听器:API对于每种事件都定义了对应的接口,接口中定义了处理该事件的方法,这些接口称为事件监听器接口。监听器接口以Listener结尾。如ActionListener接口处理ActionEvent事件。事件源产生一个事件,可以传送给事件监听者处理。 事件监听者实际上就是一个类,该类实现了某个事件监听器接口,对接受到的事件进行处理。
(3)窗体事件:WindowsListener是专门处理窗体事件监听接口,一个窗体的所有变化,如窗口的打开关闭都可以使用这个接口进行监听。实现WindowsListener单单只有一个监听器是不够的,还需要在组件时使用时注册监听。
(4)监听适配器:在事件处理中提供了很多的Adapter(适配器)类,它们是监听器接口的默认实现类。通过继承适配器类来实现监听器接口时,只需直接重写需要处理事件对应的方法即可,无需处理接口的其他方法,可以方便用户进行事件处理的实现。
2.Swing中的组件
(1)容器(Container)是Component的抽象子类,该类中允许装入其他的组件,主要用来布局。常用的容器:
Jframe:顶级容器,不能被放入另一个容器中
JPanel不能独立存在,必须放到另一个容器中
(2)组件:一个以图形方式显示在屏幕上并能与用户进行交互的对象,例如按钮、文本框等。组件要放在容器中才能显示出来。
2.其他需要总结的内容。(事件处理例题在练习的包里)
Java采用布局管理器对放置在容器内的组件实行动态管理。
(1)布局管理器用来:
决定组件在容器上如何摆放;
决定组件的大小;
(2)Java支持四种布局
FlowLayout 流布局
BorderLayout 边界布局
GridLayout 网格布局
CardLayout 卡片布局
3.容器的布局
(1)框架
框架是带标题框的窗口,窗口的大小可以改变。
默认情况下,框架使用BorderLayout布局管理器,可以使用setLayout( )对此进行修改。
(2)面板
面板是一个容器,不能作为独立的窗口使用。默认情况下,面板使用FlowLayout布局管理器,可以使用setLayout( )方法对此进行修改。面板可以像按钮那样被创建并加入到其他容器中。
4.事件处理
java事件处理是采取“委派事件模型”
5.事件处理步骤
(1)确定事件源
确定事件源,即发生事件的组件。Quit按钮 (2) 确定事件源后,根据要处理事件确定事件类型。比如点击按钮事件是ActionEvent,关闭窗口事件是WindowEvent。
(3)确定事件监听器接口,实现接口
确定事件类型后,需要进一步确定处理该事件的监听器接口,如ActionEvent事件对应的接口是ActionListener。确定接口后,需要自定义事件处理类实现该接口。
(4)覆盖监听器接口中的适当方法
自定义类实现监听器接口后,需要覆盖监听器中特定的方法。监听器接口中可能声明了多个方法,事件处理机制会根据用户的不同操作自动调用不同的方法。
(5)事件源注册监听器
实现监听器后,需要对事件源注册监听器,方能生效。每个组件都有一系列的addXXXListener方法,可以用来为组件注册不同的监听器。
(二)实验总结
实验内容:
1.宠物商店
使用GUI,编写一个宠物商店管理系统实现对宠物信息的统一管理。假设宠物种类有猫、狗,宠物信息包括:编号、品种、年龄、数量、价格。系统启动进入登录界面,登录成功进入管理界面,否则提出错误信息后退出系统。
在管理界面实现以下功能:
(1)显示所有宠物列表
(2)添加宠物到列表
(3)删除宠物
(4)对宠物信息进行修改
(5)退出
设计思路:定义欢迎窗口类
定义工具类,实现窗口组件的居中显示和显示窗口图标。修改欢迎窗口类。
实现在文本框输入后回车完成信息的发送:
事件源:input按钮,事件类型:KeyEvent,事件适配器类:KeyAdapter,重写其中的keyReleased(KeyEvent e)方法,用匿名内部类实现。
定义宠物商店管理窗口类
定义查询、添加、修改、删除方法。
测试:模拟宠物商店中的数据,添加到表格。
修改欢迎窗口类。
定义宠物商店实体类
问题:点击相应的button没有显示相应的界面
原因:在此dialog类内没有创建showWelcomePetStorePlus()的方法
解决方法:
public void showWelcomePetStorePlus() {
this.setVisible(false);
new WelcomePetStorePlus().setVisible(true);
}
方法调用:
private void addListener() {
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
judjeUserItem(); //调用判断方法
showWelcomePetStorePlus();
}
});
}
(三)代码托管
- 码云commit历史截图