(一)学习总结
1.写出事件处理模型中的几个关键词,并通过具体代码实例说明你对事件处理模型的理解。
1.Java事件处理机制
(1)java事件处理是采取“委派事件模型”。
(2) 事件源是一个产生(或触发)事件的对象。
(3)事件就是承载事件源状态改变时的信息对象。java.awt.event包和javax.swing.event包中定义了各种事件类,类名以Event结尾。
(4)事件监听器接口,API对于每种事件都定义了对应的接口,接口中定义了处理该事件的方法,这些接口称为事件监听器接口。监听器接口以Listener结尾。
2.事件处理步骤
(1)确定事件源
确定事件源,即发生事件的组件。Quit按钮
(2)确定事件类型
确定事件源后,根据要处理事件确定事件类型。比如点击按钮事件是ActionEvent,关闭窗口事件是WindowEvent。
(3)确定事件监听器接口,实现接口
确定事件类型后,需要进一步确定处理该事件的监听器接口,如ActionEvent事件对应的接口是ActionListener。确定接口后,需要自定义事件处理类实现该接口。
public class QuitHandler implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
}
}
(4)覆盖监听器接口中的适当方法
自定义类实现监听器接口后,需要覆盖监听器中特定的方法。
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
(5)事件源注册监听器
//添加监听器
private void addListener() {
//添加按钮监听
addBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
addPet(); //调用添加方法
}
});
//修改按钮监听
updateBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
updatePet(); //调用修改方法
}
});
//删除按钮监听
delBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
delPet(); //调用删除方法
}
});
}
添加监听器:
public AdminDialog(Frame owner,boolean modal){
super(owner,modal);
this.init(); //初始化
this.addComponent(); //添加组件
this.addListener(); //添加监听器
queryPet(); //创建对象时显示数据
}
3.使用内部类进行事件处理
内部类是外部类的一个成员,可以直接使用外部类的属性和方法。
4.使用匿名内部类进行事件处理
send.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
output.append(input.getText()+"\n");
input.setText("");
}
});
5.使用监听适配器进行事件处理
在事件处理中提供了很多的Adapter(适配器)类,它们是监听器接口的默认实现类。
KeyListener接口有三个方法:
void keyTyped(KeyEvent e) 键入某个键时调用
void keyPressed(KeyEvent e) 键盘按下时调用
void keyReleased(KeyEvent e) 键盘松开时调用
(二)实验总结
实验内容:
基本要求:
使用GUI,编写一个宠物商店管理系统实现对宠物信息的统一管理。假设宠物种类有猫、狗,宠物信息包括:编号、品种、年龄、数量、价格。系统启动进入登录界面,登录成功进入管理界面,否则提出错误信息后退出系统。
在管理界面实现以下功能:
(1)显示所有宠物列表
(2)添加宠物到列表
(3)删除宠物
(4)对宠物信息进行修改
(5)退出
功能扩展:
用户分为管理员和普通用户两种,增加普通用户注册功能,增加普通用户界面。
实现以下功能:
(1)显示所有宠物
(2)能够按照品种对宠物进行查找
(3)购买宠物
(4)显示购买清单
(5)退出
完成实验内容,代码上传到码云,在随笔中分析程序设计思路,用PowerDesigner画出类图结构,并对完成实验内容过程中遇到的问题、解决方案和思考等进行归纳总结,注意代码中必须有必要的注释。
格式如下:
程序设计思路:首先,创建进入界面,选择注册或登录;点击注册,进入注册界面,进行注册;进行新用户注册,调转到登录界面,或者点击登录直接进入登录界面,显示宠物管理页面,显示宠物清单
创建一个主方法类,建vo包宠物类,用户类,数据包,图片,工具类,view包用户界面,管理员界面,注册界面,登录界面
类图结构:
问题1:注册的用户不能登录到页面
原因:数据的存储和用户名和密码的判断问题
问题2:注册时,迭代器不能正确判断最后一个的属性
原因:迭代器最后一个只会没有下一个值不能进行判断
解决方案:
protected void Land() {
String name = addNameText.getText();
ArrayList<Per> data1 = DataBase.data1;
int a = 0;
for (int i = 0; i < data1.size(); i++) {
if (data1.get(i).getName().equals(name)) {
a = 1;
} else if (addPasswordText.getText().equals(
addPassword1Text.getText()) == false) {
a = 2;
}
}
if (a == 1) {
JOptionPane.showMessageDialog(this, "用户名重复,请重新注册!");
} else if (a == 2) {
JOptionPane.showMessageDialog(this, "两次密码输入不同,请重新输入!");
} else {
this.setVisible(false);
data1.add(new Per(name, addPasswordText.getText()));
JOptionPane.showMessageDialog(this, "注册成功!");
new Land().setVisible(true);
}
}
(三)代码托管(务必链接到你的项目)
https://git.oschina.net/hebau_cs15/FMM.git
码云commit历史截图
上传实验项目代码到码云,在码云项目中选择“统计-commits”,设置搜索时间段,搜索本周提交历史,并截图。