java第七次作业

Java第五次作业--面向对象高级特性(抽象类和接口)

(一)学习总结

1 . 写出事件处理模型中的几个关键词,并通过具体代码实例说明你对事件处理模型的理解。

事件源
(1)事件源是一个产生(或触发)事件的对象。当这个事件源对象的某些状态以某种方式发生变化时,就会产生某种类型的事件(一个事件源可能会生成多个不同类型的事件)。如果某个组件(对象)希望得到事件源产生的事件,就需要在这个事件源上注册。
事件
(2)事件就是承载事件源状态改变时的信息对象。java.awt.event包和javax.swing.event包中定义了各种事件类,类名以Event结尾。
(3)事件监听器接口
API对于每种事件都定义了对应的接口,接口中定义了处理该事件的方法,这些接口称为事件监听器接口。监听器接口以Listener结尾。如ActionListener接口处理ActionEvent事件。事件源产生一个事件,可以传送给事件监听者处理。事件监听者实际上就是一个类,该类实现了某个事件监听器接口,对接受到的事件进行处理。

//添加监听器
	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();       //创建对象时显示数据
	}

2 . javax.swing

接口 WindowConstants
EXIT_ON_CLOSE
static final int EXIT_ON_CLOSE退出应用程序默认窗口关闭操作。尝试在支持此操作的 Windows 上执行此项设置(如 JFrame)可能会根据 SecurityManager 抛出一个 SecurityException

3 . Java窗口关闭设置DISPOSE_ON_CLOSE和EXIT_ON_CLOSE 的区别

setDefaultCloseOperation();是用来设定窗口被关闭时(比如点击了右上角的”x”)的行为。参数有:DISPOSE_ON_CLOSE:隐藏当前窗口,并释放窗体占有的其他资源。在窗口被关闭的时候会dispose这个窗口。EXIT_ON_CLOSE:结束窗口所在的应用程序。在窗口被关闭的时候会退出JVM。如果程序没有其他线程在运行,当所有窗口都被dispose后,JVM也会退出。
代码举例:

import javax.swing.JFrame;
import static javax.swing.JFrame.*;//引入JFramed的静态常量
public class Example {
public static void main(String[] args) {
    JFrame window1 = new JFrame("窗口A");//创建带标题的窗口
    JFrame window2 = new JFrame("窗口B");
    window1.setBounds(600, 100, 180, 100);//左,上,宽,高
    window2.setBounds(260, 100, 180, 100);
    window1.setVisible(true);
    window2.setVisible(true);
    window1.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    window2.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

运行结果:
单击窗口A的关闭按钮,只有窗口A被关闭。
单击窗口B的关闭按钮,两个窗口都被关闭。

(二)实验总结

实验内容:
基本要求:
使用GUI,编写一个宠物商店管理系统实现对宠物信息的统一管理。假设宠物种类有猫、狗,宠物信息包括:编号、品种、年龄、数量、价格。系统启动进入登录界面,登录成功进入管理界面,否则提出错误信息后退出系统。
在管理界面实现以下功能:
(1)显示所有宠物列表
(2)添加宠物到列表
(3)删除宠物
(4)对宠物信息进行修改
(5)退出
功能扩展:
用户分为管理员和普通用户两种,增加普通用户注册功能,增加普通用户界面。
实现以下功能:
(1)显示所有宠物
(2)能够按照品种对宠物进行查找
(3)购买宠物
(4)显示购买清单
(5)退出

完成实验内容,代码上传到码云,在随笔中分析程序设计思路,用PowerDesigner画出类图结构,并对完成实验内容过程中遇到的问题、解决方案和思考等进行归纳总结,注意代码中必须有必要的注释。
程序设计思路:创建一个宠物类,创见一个数据库,存入数据。设计管理员窗口类,实现窗口布局。设置管理员服务类,在类内实现添加,删除和修改内容。同时进行判断删除和修改是否符合数据库中已包含的内容。创建欢迎窗口类,在欢迎窗口实现后,将“进入系统”的button与管理界面进行承接,完成按钮的功能。
功能扩展思路:在还以界面分别设置三个button(管理员界面,用户注册,用户登录),模拟之前的微博注册实现用户注册,并对其进行用户可否成功注册的判断。点击注册之后,监听器实现用户注册合法的检验,并返回欢迎界面。
类图结构:


问题1:点击相应的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();
			}
		});	
	}

问题2:由于要在文本框内显示数据,所以数据是String类型,在进行购买后,如何将其进行相应的变化
原因:String类型不能直接进行运算
解决方案:将其String类型的数据转化为int类型,进行计算


问题3:欢迎界面使用FlowLayout布局,图片无法显示
解决方案:使用BorderLayout布局将其NROTH进行对三个按钮的分布
实现代码:

private void addComponent() {
		this.add(this.titleLabel, BorderLayout.NORTH);
		JPanel btnPanel = new JPanel();
		btnPanel.setLayout(null); // 清除JPanel的布局
		this.add(btnPanel);
		btn1.setBounds(65, 20, 100, 50); // 定义按钮边界位置
		btnPanel.add(btn1);
		btn2.setBounds(185, 20, 100, 50); // 定义按钮边界位置
		btnPanel.add(btn2);
		btn3.setBounds(305, 20, 100, 50); // 定义按钮边界位置
		btnPanel.add(btn3);
	}

问题4:用户登陆时,密码输入后完全显示,调用JPasswordField方法后出现错误
原因:getPassword()方法的到的是一个char型数组。
解决方案:要想将其进行密码的验证,由于用户类的密码是String类,必须将其转换为String类才能继续进行验证。
实现代码:

public void findUserItem(){
	String addName = addNameText.getText();
	char[] a = addKeyText.getPassword();
	String addKey=String.valueOf(a);
	boolean Success = UpServies.findUserData(addName,addKey);
	if(Success){
		showUserDialog();
	}else{
		JOptionPane.showMessageDialog(this, "用户名或密码错误");
	}		
}

欢迎界面:

管理员界面:

用户登录界面:

用户注册界面:

购买界面:

(三)代码托管

  • 码云commit历史截图

原文地址:https://www.cnblogs.com/hc395071675/p/6815925.html