(一)学习总结
1.写出事件处理模型中的几个关键词,并通过具体代码实例说明你对事件处理模型的理解。
- 事件就是承载事件源状态改变时的信息对象。java.awt.event包和javax.swing.event包中定义了各种事件类,类名以Event结尾。
- 对所有组件进行事件处理来让每一个组件都发挥自己的作用;
- 事件就是表示一个对象的发生状态变化,若想处理此事件,就需要事件的监听者不断监听事件的变化,并根据这些事件进行相应的处理;
- 在Swing编程中,使用了最早AWT的事件处理方式,所有的事件类都是EventObjet类的子类;
EventObject类的定义格式:
public class EventObject extends Objet implements Serializable{
public EventObject(Objet source){
}
public Object getSource(){
}
public String toString(){
}
}
- 大部分图形界面的事件处理类或接口都保存在java.awt.evet包中;
- 如果没有能够接受和处理事件的对象,图形界面程序所生成的一切事件都是无用的,这些事件接收对象被称为事件接听器;
- 所有的事件监听器都是以监听接口的形式出现的,处理时只需要实现此接口即可;
事件处理步骤:
- 确定事件类型后,需要进一步确定处理该事件的监听器接口,如ActionEvent事件对应的接口是ActionListener。确定接口后,需要自定义事件处理类实现该接口。
- 自定义类实现监听器接口后,需要覆盖监听器中特定的方法。监听器接口中可能声明了多个方法,事件处理机制会根据用户的不同操作自动调用不同的方法。
- 实现监听器后,需要对事件源注册监听器,方能生效。每个组件都有一系列的addXXXListener方法,可以用来为组件注册不同的监听器。
public class QuitHandler implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
}
}
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
quit.addActionListener(new QuitHandler());
- 内部类是外部类的一个成员,可以直接使用外部类的属性和方法。在GUI事件处理中,经常使用内部类。
- 对Send按钮进行事件处理,实现发送消息的功能。事件源:Send按钮,事件类型:ActionEvent,事件监听器接口:ActionListener,定义事件处理类SendHandler实现ActionListener接口,并覆盖其中的ActionPerformed方法,用addActionListener方法对Send按钮注册监听器。
public class SendHandler implements ActionListener{
public void actionPerformed(ActionEvent e) {
output.append(input.getText()+"
");
input.setText("");
}
}
-SendHandler类中需要使用ChatRoom类的output和input属性,那么SendHandler类应该作为ChatRoom类的内部类存在,才能直接使用外部类的属性。
public class ChatRoom{
.......
public class SendHandler implements ActionListener{
public void actionPerformed(ActionEvent e) {
output.append(input.getText()+"
");
input.setText("");
}
......
}
- 内部类SendHandler进行事件处理时,只需实例化一个对象作为Send按钮的ActionEvent事件的监听器对象,那么就可以使用匿名内部类来实现。
send.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
output.append(input.getText()+"
");
input.setText("");
}
});
- 在事件处理中提供了很多的Adapter(适配器)类,它们是监听器接口的默认实现类。通过继承适配器类来实现监听器接口时,只需直接重写需要处理事件对应的方法即可,无需处理接口的其他方法,可以方便用户进行事件处理的实现。
- KeyListener接口有三个方法:
1.void keyTyped(KeyEvent e)键入某个键时调用
2.void keyPressed(KeyEvent e)键盘按下时调用
3.void keyReleased(KeyEvent e)键盘松开时调用- 实现在文本框输入后回车完成信息的发送:
事件源:input按钮,事件类型:KeyEvent,事件适配器类:KeyAdapter,重写其中的keyReleased(KeyEvent e)方法,用匿名内部类实现。- 此功能也可以通过捕获文本框的ActionEvent事件完成
input.addKeyListener(new KeyAdapter(){
public void keyReleased(KeyEvent e){
int KeyCode = e.getKeyCode();
if (KeyCode==KeyEvent.VK_ENTER){
output.append(input.getText()+"
");
input.setText("");
}
(二)实验总结
实验内容:
基本要求:
使用GUI,编写一个宠物商店管理系统实现对宠物信息的统一管理。假设宠物种类有猫、狗,宠物信息包括:编号、品种、年龄、数量、价格。系统启动进入登录界面,登录成功进入管理界面,否则提出错误信息后退出系统。
在管理界面实现以下功能:
(1)显示所有宠物列表
(2)添加宠物到列表
(3)删除宠物
(4)对宠物信息进行修改
(5)退出
功能扩展:
用户分为管理员和普通用户两种,增加普通用户注册功能,增加普通用户界面。
实现以下功能:
(1)显示所有宠物
(2)能够按照品种对宠物进行查找
(3)购买宠物
(4)显示购买清单
(5)退出
(三)代码托管(务必链接到你的项目)
码云commit历史截图
上传实验项目代码到码云,在码云项目中选择“统计-commits”,设置搜索时间段,搜索本周提交历史,并截图。