• 《Java技术》第七次作业计科1501赵健宇


    (一)学习总结

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

    • 面向对象的软件系统是"事件驱动"的
    • 事件对一个组建的状态发生了变化,基本上任意一个组件都有对应的事件,如果想对这些事件进行处理,就需要不断地对时间监听。
    • 事件类有个getSource()方法去的时间的源对象

    • 事件对象(Event object):事件发生时所携带的信息
    • 事件源(Event Source):能够产生事件的GUI组件对象,如按钮、文本框等。
    • 事件监听器(Event Listener):当事件发生时,事件监听器对象会得到通知,它所事先准备好的事件处理方被调用。这些事件处理方法的参数中,将引用到相应的事件对象。
    三者之间的相互协作关系称为“事件委托模型”

    事件适配器:实现某一特定事件接口的所有方法,只不过方法为空。
    例:

    frame.addWindowListener(
    new WindowAdapter(){
        public void windowClosing(WindowEvent e){
            if (user agrees)
            System.exit(0);
        }
    });
    

    四种编写事件处理方法:

    1 . 顶级类:创建一个独立的类,实现特定的事件,监听接口,很少用。

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    class ButtonDemo extends JFrame
    {
       
        JPanel jp = new JPanel();
        JButton jb = new JButton("Create Button");
     public ButtonDemo()
     {
            this.add(jp);
           
            jb.addActionListener(new MyListener(this));
            jp.add(jb);
    
      this.setTitle("Demo");
      this.setBounds(300,100,400,300);
      this.setVisible(true);
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     }
    
     public static void main(String[] args)
     {
      new ButtonDemo();
     }
    }
    class MyListener implements ActionListener //实现监听接口的自定义类
    {
        private int count = 0;
        private ButtonDemo d;
        MyListener(ButtonDemo d)
        {
            this.d = d;
        }
        public void actionPerformed(ActionEvent e)
        {
            d.jp.add(new JButton("Button: " + (count++)));
            d.setVisible(true);
        }
    }
    

    2 . 让事件源组件自身实现特定的事件监听接口,不推荐使用。
    3 . 使用内部类,推荐(多个组件需要复用)。
    4 . 使用匿名类,推荐(仅特定组件需要使用)。

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    class ButtonDemo extends JFrame
    {
       
        JPanel jp = new JPanel();
        JButton jb = new JButton("JButton");
        private int count = 0;
     public ButtonDemo()
     {
            this.add(jp);       
            jb.addActionListener(new ActionListener(){ //匿名内部类
                public void actionPerformed(ActionEvent e)
                {
                    jp.add(new JButton("The " + (count++)));
                    ButtonDemo.this.setVisible(true);
                }       
            });
            jp.add(jb);
      this.setTitle("Demo");
      this.setBounds(300,100,400,300);
      this.setVisible(true);
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     }
     public static void main(String[] args)
     {
      new ButtonDemo();
     }
    }
    

    2.其他需要总结的内容。

    JTable用法-实例 - pzy4447 - 博客园
    http://www.cnblogs.com/pzy4447/p/5229289.html
    Swing - 标签 - pzy4447 - 博客园
    http://www.cnblogs.com/pzy4447/tag/Swing/
    JOptionPane的提示框的一些用法
    http://847353020-qq-com.iteye.com/blog/954532

    ArrayList取出每个对象的方法

    for(int i=0;i<arrayL.size();i++){
        System.out.println(arrayL.get(i).toString());
    }
    

    (二)实验总结

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

    完成实验内容,代码上传到码云,在随笔中分析程序设计思路,用PowerDesigner画出类图结构,并对完成实验内容过程中遇到的问题、解决方案和思考等进行归纳总结,注意代码中必须有必要的注释。
    格式如下:
    程序设计思路:
    创建一个主方法类,宠物包,用户包,数据包,图片资源包,工具类,视图包(用户界面,管理员界面,注册界面,登录界面)
    类图结构:

    问题1:图片资源使用问题
    解决方案:在res包中存放图片,创建图片对象方法如下

    private ImageIcon img = new ImageIcon("src/res/jiemian.jpg");
    

    问题2:内存占用过大问题
    解决方案:JFrame创建的面板关闭按钮未真正实现

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    

    注:JDialog不适用

    问题3:设置背景图片问题
    解决方案:

        private ImageIcon img = new ImageIcon("src/res/jiemian.jpg");
    	private JLabel lab = new JLabel(img);
    	this.add(this.lab, BorderLayout.NORTH);
    
    	lab.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
    	// 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明
    	JPanel imagePanel = (JPanel) this.getContentPane();
    	imagePanel.setOpaque(false);
    	// 内容窗格默认的布局管理器为BorderLayout
    	imagePanel.setLayout(null);
    	// 把背景图片添加到分层窗格的最底层作为背景
    	this.getLayeredPane().add(lab, new Integer(Integer.MIN_VALUE));
    

    问题4:ArrayList转化二维数组问题

        private void visibel() {//显示table方法
    		String[] title = {"编号","品种","年龄","数量","价格"};
    		ArrayList<Pet> pet = useData.getData();
    		String[][] tbody = listToArray(pet);
    		TableModel dataModel = new DefaultTableModel(tbody,title);
    		table.setModel(dataModel);
    		
    		String[][] buyBody =listToArray(buyP);
    		TableModel buyDataModel = new DefaultTableModel(buyBody,title);//二维数组,标题数组
    		buytable.setModel(buyDataModel);//将tablemodel放入table
    	}
    	private String[][] listToArray(ArrayList<Pet> list) {//转化方法
    		String[][] tbody = new String[list.size()][5];
    		for(int i = 0; i < list.size();i++){
    			Pet p = list.get(i);
    			tbody[i][0] = p.getNo();
    			tbody[i][1] = p.getType();
    			tbody[i][2] = p.getAge();
    			tbody[i][3] = p.getNumber();
    			tbody[i][4] = p.getMoney();
    		}
    		return tbody;
    	}
    

    问题5:ArrayList集合不能多类同时使用,和初始化集合问题
    解决方案:

    public static ArrayList<Pet> data=new ArrayList<Pet>();
    	static{
    			data.add(new Pet("1","腊肠","5","20","100"));
    			data.add(new Pet("2","泰迪","1","23","110"));
    	};
    

    (三)代码托管(务必链接到你的项目)

    点击此处进入码云

  • 相关阅读:
    Delphi下Treeview控件基于节点编号的访问
    oracle的conn / as sysdba是以sys还是system用户登录呢?
    delphi 字母加数字如何自增??比如0A--0Z,1A--1Z一直到9A--9Z 请赐教
    ORACLE_HOME要怎么配置?
    sqlplus / as sysdba 详解
    oracle 11G数据库实例增加内存
    SQL在字符串中取出最长数字子序列
    delphi 全局变量的定义与初始化赋值
    Delphi公用函数单元
    Dapper的正确使用姿势
  • 原文地址:https://www.cnblogs.com/ai1045152332/p/6823566.html
Copyright © 2020-2023  润新知