《Java技术》第七次作业

《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;
      }
    

(三)代码托管

posted @ 2017-05-11 17:24  lymm  阅读(229)  评论(0)    收藏  举报