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

(一)学习总结

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

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

《Java技术》第七次作业计科1501赵健宇_第1张图片

• 事件对象(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

(二)实验总结

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

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

《Java技术》第七次作业计科1501赵健宇_第2张图片

问题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 = 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 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 data=new ArrayList();
    static{
            data.add(new Pet("1","腊肠","5","20","100"));
            data.add(new Pet("2","泰迪","1","23","110"));
    };

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

点击此处进入码云

《Java技术》第七次作业计科1501赵健宇_第3张图片

你可能感兴趣的:(《Java技术》第七次作业计科1501赵健宇)