Java第七次作业

(一)学习总结

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()+"
");
          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”,设置搜索时间段,搜索本周提交历史,并截图。

原文地址:https://www.cnblogs.com/miao0512/p/6833003.html