《Java技术》第七次作业
Java第七次作业
一 . 学习总结
1.事件处理模型中的关键词及其具体代码实例
- 事件处理机制
- 采取"委派事件模型",委派事件模型是指,当事件发生时,产生事件源,把此信息传递给事件的监听者
- 事件源
- 是指一个产生或触发事件的对象
- 事件
- 是指承载事件源状态改变时的信息对象
- 事件监听器接口
- 事件监听器接口以Listener结尾,监听器定义了处理事件的方法
- 事件处理步骤
- 确定事件源,发生事件的组件按钮
- 确定事件类型,ActionEvent等等
- 事件源注册监听器
- 确定事件监听器接口
- 实现接口定义的方法
- 使用内部类进行事件处理
- 实例:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class windows{
class date extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.out.println("退出系统!");
System.exit(0);
}
}
}
public class Test3 {
public static void main(String[] args) {
JFrame frame = new JFrame("适配器测试");
frame.setVisible(true);
frame.setBounds(300, 150, 350, 350);
JPanel btnPanel = new JPanel();
frame.addWindowListener(new windows().new date());
frame.setVisible(true);
frame.setResizable(false); // 窗体大小固定
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
- 使用匿名内部类进行事件处理
- 实例:
import java.awt.*;
import java.awt.event.*;
class Test3 extends JFrame {
private JButton but = new JButton("关闭窗口");
// 构造方法
public Test3() {
init(); // 初始化
addComponent(); // 添加组件
addListener(); // 添加监听器
}
// 窗口初始化
private void init() {
this.setTitle("匿名内部类测试!");
this.setBounds(300, 150, 350, 350);
this.setVisible(true);
this.setResizable(false); // 窗体大小固定
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// 添加组件
private void addComponent() {
JPanel btnPanel = new JPanel();
btnPanel.setLayout(null); // 清除JPanel的布局
this.add(btnPanel); // 定义按钮边界位置
btnPanel.add(but);
but.setBounds(120, 140, 100, 40);
}
// 添加监听器
private void addListener() {
but.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
showAdminDialog();
}
});
}
// 实现监听器定义的方法
public void showAdminDialog() {
this.setVisible(false);
}
public static void main(String[] args){
Test3 t = new Test3();
}
}
- 使用监听适配器进行事件处理
- 实例:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class date extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.out.println("退出系统!");
System.exit(0);
}
}
public class Test3 {
public static void main(String[] args) {
JFrame frame = new JFrame("适配器测试");
frame.setVisible(true);
frame.setBounds(300, 150, 350, 350);
JPanel btnPanel = new JPanel();
frame.addWindowListener(new date());
frame.setVisible(true);
frame.setResizable(false); // 窗体大小固定
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
二 . 实验总结
1. 宠物商店图形界面
-
程序设计思路:
- 首先,创建
WelcomeFrame
界面,进行注册或登录功能;点击注册,进入LoginFrame
注册界面,进行注册;点击登录,若为管理员登录,进入AdFrame
管理员界面,否则为UserFrame
用户界面;若在用户界面点击宠物清单进入ListFrame
清单界面 - 其次创建
Pet
宠物类存放宠物属性,LoginCheck
注册类存放注册属性创建data
数据类,存放初始化的宠物信息,与用户购买的宠物集合,GUITools
类对于界面组件显示的方法 - 最后,
AdminDao
类是对管理界面的按钮组件功能进行实现,AdService
类是对AdminDao
类中的方法进行判断,UserDao
类是对用户界面的按钮组件功能进行实现,UserService
类是对UserDao
类中的方法进行判断
- 首先,创建
-
问题1:
- 进入管理员,用户,清单界面时,列表不显示已经实例化的数据
-
原因:
- 在初始化方法中没有对数据进行显示
-
解决方案:
- 在初始化方法中没有对数据进行显示,调用查询方法,进行显示
-
问题2:
- 注册时,对用户名,手机号,邮箱用迭代器判断时,只能判断一个属性,并且判断完出错
-
原因:
- 每定义一个迭代器,只能判断一个属性,不能一个迭代器同时判断多个属性
-
解决方案:
- 注册的数据已经存储到集合中,用for循环对集合的元素与注册时的数据依次比较近判断
if (e.getSource() == but) { String name = tf1.getText(); String password1 = newString(tf2.getPassword()); String password2 = new String(tf3.getPassword()); String phone = tf4.getText(); String email = tf5.getText(); //Iterator<LoginCheck> iter = person.iterator(); int flag = 0; for(int i =0; i<person.size();i++){ if(person.get(i).getName().equals(name)){ tableLabel6.setText("用户名已经存在!"); flag = 1; } if(person.get(i).getNumber().equals(phone)){ tableLabel6.setText("手机号已经存在!"); flag = 1; } if(person.get(i).getEmail().equals(email)){ tableLabel6.setText("邮箱已经存在!"); flag = 1; } } if (!password2.equals(password1)) { flag = 1; tableLabel6.setText("密码与确认密码不一致!"); } if (flag == 0) { person.add(new LoginCheck(name, password1, phone, email)); showAdminDialog(); tf1.setText(""); tf2.setText(""); tf3.setText(""); tf4.setText(""); tf5.setText(""); } }
-
类图:
三 .代码托管
- 码云commit历史截图 代码链接
四 .学习进度条
进程 | 代码行数(新增/累积) | 学习时间(新增/累积) | 本周学习内容 |
---|---|---|---|
目标 | 5000行 | 300小时 | |
第2-4周 | 500/500 | 45/45 | 自学了前四章的内容,自己练习了学习过程中的所有代码,并写了一些练习题提交到了码云中 |
第5周 | 200/700 | 15/55 | 学习了老师要求的内容 |
第6周 | 300/1000 | 15/70 | 学习了作业中要求的内容 |
第7-8周 | 200/1200 | 15/85 | 掌握了本次学习的全部内容 |
第9周 | 300/1500 | 10/95 | 掌握了本次学习的内容 |
第10周 | 400/1900 | 10/95 | 掌握了本次学习的内容 |
第11周 | 600/2500 | 20/95 | 对图形界面有了一定的理解 |