Java第7次作业
(一)学习总结
1、写出事件处理模型中的几个关键词,并通过具体代码实例说明你对事件处理模型的理解。
<1>事件处理的关键词
(1)事件(XXXEvent):事件就是承载事件源状态改变时的信息对象。
(2)事件监听器接口(xxxListener):API对于每种事件都定义了对应的接口,接口中定义了处理该事件的方法,这些接口称为事件监听器接口。
(3)监听适配器(xxxAdapter):继承适配器类来实现监听器接口时,只需直接重写需要处理事件对应的方法即可,无需处理接口的其他方法,可以方便用户进行事件处理的实现。
<2>事件的种类:
(1)窗体事件:WindowEvent
(2)动作事件:ActionEvent
(3)键盘事件:KeyEvent
(4)鼠标事件:MouswEvent
<3>使用事件监听器接口需要先注册事件监听器:addxxxListener
窗口事件的应用:
package 练习;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
public class First {
public static void main(String[] args)
{
JFrame frame=new JFrame("窗口事件"); //实例化窗口对象
//直接使用WindowAdapter的子类完成监听的处理
frame.addWindowListener(new WindowAdapter()
{
//覆写关闭窗口的方法
public void windowclosing(WindowEvent arg0)
{
System.exit(1);
}
});
}
}
使用适配器只覆写需要的方法就可可,不用覆写窗体事件的所有方法。
动作事件:
submit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
if(arg0.getSource()==submit) //判断触发源是否是提交按钮
{
String tname=nameText.getText();
String tpassword=new String(passwordText.getPassword());
Check log=new Check(tname,tpassword);
if(log.validate())
{
showDialog();
}
else
{
infoLab.setText("登录失败,错误的用户名或密码");
}
}
}
}
判断触发源是否是提交按钮时,直接使用的是地址比较,如果是触发源则执行语句。
2、其他总结
图形界面管理
(二)实验总结
程序设计思路:
1.定义一个宠物信息Petmessage类,定义宠物的编号、姓名、种类、年龄、价格、数量属性和get、set方法。
2、定义一个宠物店的信息PetBase类,宠物店里有哪些宠物,用集合来存储宠物信息。
3,、定义一个管理员访问信息Administrator类,当访问宠物商店时展示商店里有那些宠物,并且定义添加宠物和删除宠物的方法,方便管理员管理商店时调用。
4、定义一个管理员管理宠物AdministratorSever类,定义方法展示所有的宠物,定义添加方法添加宠物,添加宠物时,输入宠物信息,迭代取出宠物商店原有的宠物编号和新添加的宠物编号比较一样添加失败,不一样,调用Administrator 的添加方法添加新的宠物,并且刷新宠物商店展示所欲有的宠物,定义删除方法,输入要删除宠物的编号,宠物商店里没有宠物的编号,删除失败,如果宠物商店里有输入的编号。则调用Administrator的删除方法删除,定义修改方法,输入要修改的编号,宠物商店中有这个编号,先调用删除方法,在调用添加方法,没有这个编号则不能修改。
5、定义一个Check存储用户登录的用户名和密码的信息。
6、在视图中定义两个类:一个是登录界面,另一个是宠物展示的界面。
在登录界面的类中,声明登录、密码等按钮、标签和输入信息的文本域。使用监听接口的监听按钮的单击事件判断是否是触发源,输入相应的用户名和密码比较是一样的进入宠物展示界面,错误提示相应的错误信息。
在宠物展示的界面中。同时设置向里面添加文本域、标签和按钮并且使用绝对定位确定位置。
在宠物展示的类中添加宠物信息和添加、修改、删除的按钮,并且提供添加、修改和删除的监听器;确定按钮、文本等绝对位置。
7、定义一个Tool类,确定视图中登录界面和展示界面的窗口位置。
- 问题1:在集合中存储的数据类型必须为包装类型。
- 解决方案:
public boolean addPetMessage(String no,String name, String kind,int age, String number, String price)
{
ArrayList<PetMessage> pet = queryPetMessage();
Iterator<PetMessage> iterator = pet.iterator();
while(iterator.hasNext())
{
PetMessage pet1 = iterator.next();
//如果存在重复编号则添加不成功
if(pet1.getNo().equals(no))
{
return false;
}
}
PetMessage thisPet= new PetMessage(no,name,kind,Integer.parseInt(age),Integer.parseInt(number),Double.parseDouble(price));
administrator.addPet(thisPet); //添加成功
return true;
}
- 问题2:宠物展示界面中的文本标签位置混乱。
- 原因:使用绝对位置时,数据安排不合理
- 解决方案:
addNoText.setBounds(50, 280, 80, 25);
addNameText.setBounds(150, 280, 80, 25);
addKindText.setBounds(250, 280, 80, 25);
addAgeText.setBounds(350, 280, 80, 25);
addNumberText.setBounds(450, 280, 80, 25);
addPriceText.setBounds(550, 280, 80, 25);
- 类图:
(三)代码托管
https://git.oschina.net/hebau_cs15/Java-CS01yxr.git
(四)学习进度条
代码行数(新增/累积) | 学习时间(新增/累积) | 本周学习内容 | |
---|---|---|---|
目标 | 5000行 | 300小时 | |
第2-4周 | 150/300 | 30/30 | 学习了.... |
第5周 | 220/300 | 30/50 | 学习了关于double类型存在精度问题,取指定位置和截取字符串;数组的应用 |
第6周 | 550/600 | 60/80 | |
第8周 | 700/800 | 60/80 | 面向对象的继承和多态 |
第9周 | 800/800 | 80/100 | 工厂设计和Java常用的类 |
第10周 | 800/800 | 80/100 | 异常处理和集合类 |
第11周 | 1000/1000 | 90/100 | 图形界面管理 |