《Java技术》第七次作业
###(一)学习总结
1.写出事件处理模型中的几个关键词,并通过具体代码实例说明你对事件处理模型的理解。
- 事件就是表示一个对象的发生状态变化。
- 基本事件及其监听处理:
- 窗体事件及监听处理:使用匿名内部类完成监听操作
- Java事件处理三要素:
1) 事件源(Event Source):即事件发生的场所,就是指各个组件,如按钮等,点击按钮其实就是组件上发生的一个事件;
2) 事件(Event):事件封装了组件上发生的事情,比如按钮单击、按钮松开等等;
3) 事件监听器(Event Listener):负责监听事件源上发生的特定类型的事件,当事件到来时还必须负责处理相应的事件; - 事件处理的机制: 1) 首先事件是有不同的类别的,比如按钮单击、菜单项单击等事件就属于“动作事件”(Action Event),而关闭窗口、最小化窗口等事件就属于“窗口事件”(Window Event);
2) 不同类型的事件需要用不同类型的监听器监听;
3) 而监听器是一种类对象,这种类必须实现监听器接口(Listener),对于监听不同类型的事件AWT库准备了不同类型的监听器接口,比如要监听动作事件就必须实现ActionListener接口,监听窗口事件就必须实现WindowListener接口;
!监听器中最重要的就是事件处理方法了,监听器必须在接受事件之后进行处理(响应);
4) 如何实现监听?
i. 首先事件源(发生事件的组件)必须同意我身上发生的事件允许那些监听器监听;
ii. 也就是说想监听它身上发生的事件的监听器必须到它这里注册,即组件必须调用方法addXxxListener将监听器注册到它的监听器列表中;
iii. 当事件发生时就会将事件对象(Event)发送到所有注册过的监听器那里进行处理; - 编写事件处理程序的基本流程:
1) 首先需要实现监听器类:自己编写一个类,至少要实现一种类型的监听器接口,并实现接口中所有的事件处理方法;
2) 创建组件,并对组件注册响应的监听器:首先需要创建监听器对象,将监听器对象作为参数传入组件的addXxxListener方法完成注册;
3) 全部工作完成,事件的处理完全自动进行;
4) 简单的示例:处理一个按钮的单击事件
`
public class AwtTest {
Frame f = new Frame("Event Test");
TextField tf = new TextField(30);
Button ok = new Button("OK");
class OkListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("OK button pushed!");
tf.setText("Hello!");
}
}
public void init() {
f.add(tf);
f.add(ok, BorderLayout.SOUTH);
ok.addActionListener(new OkListener());
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new AwtTest().init();
}
} `
(二)实验总结
实验内容:
1.宠物商店系统
实验内容:
基本要求:
使用GUI,编写一个宠物商店管理系统实现对宠物信息的统一管理。假设宠物种类有猫、狗,宠物信息包括:编号、品种、年龄、数量、价格。系统启动进入登录界面,登录成功进入管理界面,否则提出错误信息后退出系统。
在管理界面实现以下功能:
(1)显示所有宠物列表
(2)添加宠物到列表
(3)删除宠物
(4)对宠物信息进行修改
(5)退出
根据老师给出的代码,理解其内容,做出相应的修改,完成宠物商店界面的设置
类图
程序设计思路:
1.定义一个宠物信息PetItem类,定义宠物的编号、姓名、种类、年龄、价格、数量属性和get、set方法。
2、定义一个宠物店的信息DataBase类,宠物店里有哪些宠物,用集合来存储宠物信息。
3,、定义一个管理员访问信息Administrator类,当访问宠物商店时展示商店里有那些宠物,并且定义添加宠物和删除宠物的方法。
4、定义一个管理员管理宠物AdministratorSever类,定义方法展示所有的宠物,定义添加方法添加宠物。
5、定义一个Tool类,确定视图中登录界面和展示界面的窗口位置。
问题1:无论输入什么用户名密码,都能进入。
原因:用户名和密码的判断问题
解决方案:
`
public boolean findAdminData(String name, String password) {
if ("shiziyu".equals(name) && "2015614840326".equals(password))
{
return true;
}
return false;
}
}`
问题2:最后退出失败
原因:退出函数错误
解决方案:
public void exPetItem() { this.setVisible(false); //退出 JOptionPane.showMessageDialog(this, "退出成功"); } }