博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java第七次作业
阅读量:4315 次
发布时间:2019-06-06

本文共 4496 字,大约阅读时间需要 14 分钟。


一、学习总结

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

(1)事件处理的步骤:
①定义和添加组件(事件源)
  • 初始化:
    • private JLabel Label = new JLabel("");按钮的初始化。
    • private JTextField addText = new JTextField(x);文本框(x为长度)的初始化。
    • private JLabel titleLabel=new JLabel(new ImageIcon("pet.jpg"));图片的初始化
    • private JTextArea text=new JTextArea();文本文档的初始化
  • 设置和添加组件:
    • label.setBounds(a,b,x,y);this.add(label);设置按钮位置、大小并加入窗口(a,b为按钮位置;x,y为按钮大小)。
    • addText.setBounds(a,b,x,y);this.add(addText);设置文本框按钮位置、大小。
    • this.setIconImage(kit.createImage(titleIconPath));设置添加图片
    • text.setBounds(50, 300, 300, 200); this.add(text);设置文本文档大小并添加

      ②添加监听器
  • 在内部类中调用方法来设置对应按钮对应的方法。如下:
Btn.addActionListener(new ActionListener(){//Bth是初始化的按钮    public void actionPerformed(ActionEvent e){        A();  //调用A方法    }});
③写按钮执行的方法
  • 及在此类中写对应执行方法。如上调用的A()方法。
(2)其他关键字
  • this.setVisible(false);关闭当前窗口。
  • new Frame().setVisible(true);打开Frame窗口。
  • this.setTitle(str);设置窗口标题。
  • this.setSize(width,height);设置窗口大小。
  • text.append(str);在文本文档中输出str
(3)简单的理解事件处理机制也就是:事件源将事件传给事件监听器的处理方式。(事件源是事件的对象)
  • 实例:
import java.awt.Frame;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JTextField;public class Test extends JDialog{    //定义界面使用的组件    private JLabel Label = new JLabel("测试");    private JTextField Text = new JTextField(6);    private JButton Btn = new JButton("测试按钮");    //构造方法    public Test(){        this(null,true);            }    public Test(Frame owner,boolean modal){        super(owner,modal);        this.init();            //初始化        this.addComponent();    //添加组件        this.addListener();     //添加监听器    }    //初始化操作    private void init() {        this.setTitle("测试窗口标题");        this.setSize(500,500);        this.setResizable(false);    }    //添加组件    private void addComponent() {        this.setLayout(null);        Label.setBounds(50, 50, 70, 25);        this.add(Label);        Text.setBounds(50,150,70,25);        this.add(Text);        Btn.setBounds(50, 200, 100, 50);        this.add(Btn);    }    //添加监听器    private void addListener() {        Btn.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e){                test();  //弹出测试成功窗口方法            }        });     }    public void test(){        JOptionPane.showMessageDialog(null, "测试成功!");    }    public static void main(String[] args){   //测试        new Test().setVisible(true);    }}

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

  • 在实体类中:
    • 类中的属性不允许使用基本数据类型,必须使用基本数据类型的包装类(基本数据类型的默认值是0,包装类的默认值是null)。
    • 类中的属性必须使用private封装,封装后的属性必须提供setter、getter方法
    • 类中可以定义有多个构造方法,但必须保留一个无参构造方法
  • String类型转化为Double类型的转化: Double a=Double.parseDouble(str);

二、实验总结:

1.使用GUI,编写一个宠物商店管理系统实现对宠物信息的统一管理。假设宠物种类有猫、狗,宠物信息包括:编号、品种、年龄、数量、价格。系统启动进入登录界面,登录成功进入管理界面,否则提出错误信息后退出系统。

在管理界面实现以下功能:

(1)显示所有宠物列表
(2)添加宠物到列表
(3)删除宠物
(4)对宠物信息进行修改
(5)退出
功能扩展:
用户分为管理员和普通用户两种,增加普通用户注册功能,增加普通用户界面。
实现以下功能:
(1)显示所有宠物
(2)能够按照品种对宠物进行查找
(3)购买宠物
(4)显示购买清单
(5)退出

完成实验内容,代码上传到码云,在随笔中分析程序设计思路,用PowerDesigner画出类图结构,并对完成实验内容过程中遇到的问题、解决方案和思考等进行归纳总结,注意代码中必须有必要的注释。

  • 程序设计思路:
    • 设计实体类、数据Data类、实现基础方法Dao类、实现具体方法的服务类、设置窗口的Tools类、视图类、和主方法测试类。
    • 实体类:有宠物类、用户信息类、购买宠物类三个实体类;分别存放各自的私有成员和getter、setter、toString方法
    • Data类:分别有宠物、用户信息、购买宠物对应的三个Data类。在Data类中,设置一个三个实体类对应的静态集合,来获取数据并用静态块将数据初始化。
    • Dao类:分别有管理、用户注册的两个实现基本方法Dao类;管理Dao类中有实现宠物的添加、查询、删除、修改和购买宠物的添加、显示的基础方法;用户注册Dao类中有实现添加、查询用户的基础方法。
    • 服务类:分别有管理员、用户注册、用户购买对应的三个服务类;三个类中分别实现各自需要的具体方法。
    • 工具类:实现了设置窗口居中和设置窗口图标的方法。
    • 视图类:分别有宠物店首页窗口、管理员窗口、用户注册窗口、用户登录窗口、用户购买窗口。①将宠物店首页窗口放进四个按钮并监听,按钮分别为:管理系统、用户注册、用户登录、退出系统。按下按钮分别打开对应的窗口(退出系统按钮除外)。②管理员管理界面有添加宠物、删除宠物、修改宠物、返回主页按钮选项。③用户注册界面检验注册信息,注册成功后自动跳回主页。④用户登录页面登录成功有提示消息并且进入用户购买页面。
  • 问题1:在用户注册时用户不输入用户名和密码也能注册成功,
  • 原因:没有考虑用户名和密码都为空的情况
  • 解决方案:给用户名和密码为空时一个判断提示
else if(addUserName.equals("")){    JOptionPane.showMessageDialog(null, "用户名不能为空!");    addUserNameText.setText("");    addUserNameText.requestFocus();}else if(addPassword.equals("")){    JOptionPane.showMessageDialog(null, "密码不能为空!");    addPasswordText.setText("");    addPasswordText.requestFocus();}
  • 问题2:购买宠物时,需删除一只宠物列表中相对应的宠物,在执行删除后修改操作时出错。
  • 原因:因为删除后,仍用了查找此位置的信息进行修改,此位置信息早已被删除。
  • 解决方案:删除之前将信息先存放起来再进行修改。
  • 问题3:在购买完一类宠物后,仍能进行购买,宠物列表中的数量变成负值。
  • 原因:因为没有判断宠物数量买完的情况
  • 解决方案:添加此情况的判断返回false。部分代码如下:
public boolean buyPet(String no){        ArrayList
data=queryPet(); //找出要购买的编号存放购买信息,对应删除宠物列表 for(int i=0;i
  • 宠物商店首页窗口:
    1079821-20170511212155801-891910421.png
  • 管理员管理窗口:
    1079821-20170511212223269-1645775723.jpg
  • 用户注册窗口:
    1079821-20170511212317472-674654090.png
  • 用户登录窗口:
    1079821-20170511212331863-1056753426.png
  • 用户购买窗口:
    1079821-20170512184917722-1297421336.png

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

  • 码云commit历史截图
    上传实验项目代码到码云,在码云项目中选择“统计-commits”,设置搜索时间段,搜索本周提交历史,并截图。
  • 截图
    1079821-20170511212349785-420492344.png

转载于:https://www.cnblogs.com/nuanxinwuyu/p/6842864.html

你可能感兴趣的文章
js中的NaN、Infinity、null和undefined
查看>>
Runtime
查看>>
struts2 if标签示例
查看>>
Animate CSS
查看>>
.NET安全审核检查表
查看>>
application.properties数据库敏感信息加密这么简单?
查看>>
Language Codes: ISO 639, Microsoft and Macintosh
查看>>
centos6 x64安装elasticsearch5.5.2启动报错
查看>>
公司拷贝回家的工程用sts导入clean package报错java.lang.NoClassDefFoundError
查看>>
Aborting a running program
查看>>
手机验证码测试点
查看>>
网络字节顺序
查看>>
复制mueclipse项目到eclipse
查看>>
飞扬的小鸟
查看>>
玩转TypeScript(2) --简单TypeScript类型
查看>>
Asp.net 解析json
查看>>
程序猿崛起3——这一次,我用行动说话
查看>>
201521123038 《Java程序设计》 第一周学习总结
查看>>
每天一个linux命令(20):find命令之exec
查看>>
MVC HtmlHelper用法大全
查看>>