《Java技术》第七次作业
(一)学习总结
1.写出事件处理模型中的几个关键词,并通过具体代码实例说明你对事件处理模型的理解。
事件处理流程:
事件源->处理事件方法->是否有监听器处理事件->
{有监听器处理事件->特定事件的处理方法——>找到注册的事件监听器;
没有监听器处理事件->放弃事件}事件监听器:在组件中使用注册监听,直接使用窗体的addWindowListener(监听对象)方法注册事件监听。
//窗口监听 frame.addWindowListener(new WindowApapter(){ public void windowColsing(WindowEvent arg0){ System.exit(1); } }); //动作监听 but.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0){ if(arg0.getSource()==but){ lab.setText(text.getText()); } } });
监听适配器:继承WindowAdapter类,根据自己的需要覆写方法,可以利用匿名内部类完成监听操作。
JFrame frame=new JFrame("Welcome"); frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent arg0){ System.exit(1); } });
动作事件及监听处理:使用ActionListener接口处理按钮的动作事件,ActionListener接口只定义了一个方法void actionPerformed(ActionEvent e)。
but.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0){ //发生操作时调用 if(arg0.getSource()==but){ //判断触发源是否是按钮 lab.setText(text.getText()); } } });
加入滚动条
private JTextArea text=new JTextArea(); JScrollPane scr=new JScrollPane(text); scr.setBounds(5,5,300,200); super.add(scr);
(二)实验总结
实验内容:
基本要求:
使用GUI,编写一个宠物商店管理系统实现对宠物信息的统一管理。假设宠物种类有猫、狗,宠物信息包括:编号、品种、年龄、数量、价格。系统启动进入登录界面,登录成功进入管理界面,否则提出错误信息后退出系统。
在管理界面实现以下功能:(1)显示所有宠物列表
(2)添加宠物到列表
(3)删除宠物
(4)对宠物信息进行修改
(5)退出
功能扩展:用户分为管理员和普通用户两种,增加普通用户注册功能,增加普通用户界面。实现以下功能:
(1)显示所有宠物
(2)能够按照品种对宠物进行查找
(3)购买宠物
(4)显示购买清单
(5)退出
类图
程序设计思路:
1.定义用户登录界面,编写登录验证类,在验证类中只是根据输入进来的用户名和密码进行验证,并没有注册功能,在编写图形界面时,再对用户名和密码进行验证,若登录成功,进入宠物商店管理界面。
2.定义宠物商店管理窗口类,定义查询、添加、修改、删除方法,设置窗口界面,模拟宠物数据,添加到表格。
3.定义存储数据类,使用集合存储数据。
4.创建管理类,实现宠物的添加、修改、删除方法。
5.创建项目运行类,定义main方法,进行测试。
问题1:在运行时,出现一个用户登录界面和一个空界面。
原因:在用户登录界面继承了JFrame,相当于已经定义了一个窗口,而用户登录界面类中再次定义了一个窗口。
解决方案:不需要继承JFrame。
问题2:在登录界面中,重置按钮不起作用。
submit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (arg0.getSource() == submit) { String tname = nameText.getText(); String tpass = new String(passText.getPassword()); LoginCheck log = new LoginCheck(tname, tpass); if (log.validate()) { infoLab.setText("登录成功,欢迎光临!"); frame.setVisible(false); new Admin().setVisible(true); } else { infoLab.setText("登录失败,错误的用户名或密码!"); } } if (arg0.getSource() == reset) { nameText.setText(""); passText.setText(""); infoLab.setText("用户登录系统!"); } } });
解决方案:再对重置按钮进行动作监听。把重置按钮和登录按钮的动作监听分开写。
问题3:ArrayList集合转化二维数组
private String[][] listToArray(ArrayList<Pet> list) { String[][] tbody = new String[list.size()][5]; for (int i = 0; i < list.size(); i++) { Pet pet = list.get(i); tbody[i][0] = pet.getNo(); tbody[i][1] = pet.getType(); tbody[i][2] = pet.getAge(); tbody[i][3] = pet.getNumber(); tbody[i][4] = pet.getPrice(); } return tbody; }