zoukankan      html  css  js  c++  java
  • java第七次作业

    Java第五次作业--面向对象高级特性(抽象类和接口)

    (一)学习总结

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

    事件源
    (1)事件源是一个产生(或触发)事件的对象。当这个事件源对象的某些状态以某种方式发生变化时,就会产生某种类型的事件(一个事件源可能会生成多个不同类型的事件)。如果某个组件(对象)希望得到事件源产生的事件,就需要在这个事件源上注册。
    事件
    (2)事件就是承载事件源状态改变时的信息对象。java.awt.event包和javax.swing.event包中定义了各种事件类,类名以Event结尾。
    (3)事件监听器接口
    API对于每种事件都定义了对应的接口,接口中定义了处理该事件的方法,这些接口称为事件监听器接口。监听器接口以Listener结尾。如ActionListener接口处理ActionEvent事件。事件源产生一个事件,可以传送给事件监听者处理。事件监听者实际上就是一个类,该类实现了某个事件监听器接口,对接受到的事件进行处理。

    //添加监听器
    	private void addListener() {
    		//添加按钮监听
    		addBtn.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				addPet();  //调用添加方法
    			}
    		});
    		//修改按钮监听
    		updateBtn.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				updatePet();  //调用修改方法
    			}
    		});
    		//删除按钮监听
    		delBtn.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				delPet();   //调用删除方法
    			}
    		});
    		
    	}
    

    添加监听器:

    public AdminDialog(Frame owner,boolean modal){
    		super(owner,modal);
    		this.init();            //初始化
    		this.addComponent();    //添加组件
    		this.addListener();     //添加监听器
    		queryPet();       //创建对象时显示数据
    	}
    

    2 . javax.swing

    接口 WindowConstants
    EXIT_ON_CLOSE
    static final int EXIT_ON_CLOSE退出应用程序默认窗口关闭操作。尝试在支持此操作的 Windows 上执行此项设置(如 JFrame)可能会根据 SecurityManager 抛出一个 SecurityException

    3 . Java窗口关闭设置DISPOSE_ON_CLOSE和EXIT_ON_CLOSE 的区别

    setDefaultCloseOperation();是用来设定窗口被关闭时(比如点击了右上角的”x”)的行为。参数有:DISPOSE_ON_CLOSE:隐藏当前窗口,并释放窗体占有的其他资源。在窗口被关闭的时候会dispose这个窗口。EXIT_ON_CLOSE:结束窗口所在的应用程序。在窗口被关闭的时候会退出JVM。如果程序没有其他线程在运行,当所有窗口都被dispose后,JVM也会退出。
    代码举例:

    import javax.swing.JFrame;
    import static javax.swing.JFrame.*;//引入JFramed的静态常量
    public class Example {
    public static void main(String[] args) {
        JFrame window1 = new JFrame("窗口A");//创建带标题的窗口
        JFrame window2 = new JFrame("窗口B");
        window1.setBounds(600, 100, 180, 100);//左,上,宽,高
        window2.setBounds(260, 100, 180, 100);
        window1.setVisible(true);
        window2.setVisible(true);
        window1.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        window2.setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
    }
    

    运行结果:
    单击窗口A的关闭按钮,只有窗口A被关闭。
    单击窗口B的关闭按钮,两个窗口都被关闭。

    (二)实验总结

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

    完成实验内容,代码上传到码云,在随笔中分析程序设计思路,用PowerDesigner画出类图结构,并对完成实验内容过程中遇到的问题、解决方案和思考等进行归纳总结,注意代码中必须有必要的注释。
    程序设计思路:创建一个宠物类,创见一个数据库,存入数据。设计管理员窗口类,实现窗口布局。设置管理员服务类,在类内实现添加,删除和修改内容。同时进行判断删除和修改是否符合数据库中已包含的内容。创建欢迎窗口类,在欢迎窗口实现后,将“进入系统”的button与管理界面进行承接,完成按钮的功能。
    功能扩展思路:在还以界面分别设置三个button(管理员界面,用户注册,用户登录),模拟之前的微博注册实现用户注册,并对其进行用户可否成功注册的判断。点击注册之后,监听器实现用户注册合法的检验,并返回欢迎界面。
    类图结构:


    问题1:点击相应的button显示相应的界面
    原因:在此dialog类内没有创建showWelcomePetStorePlus()的方法
    解决方案:
    方法创建:

        public void showWelcomePetStorePlus() {
    		this.setVisible(false);
    		new WelcomePetStorePlus().setVisible(true);
    	}
    

    方法调用:

    private void addListener() {
    		//注册按钮监听
    		btn.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				judjeUserItem();  //调用判断方法
    				showWelcomePetStorePlus();
    			}
    		});	
    	}
    

    问题2:由于要在文本框内显示数据,所以数据是String类型,在进行购买后,如何将其进行相应的变化
    原因:String类型不能直接进行运算
    解决方案:将其String类型的数据转化为int类型,进行计算


    问题3:欢迎界面使用FlowLayout布局,图片无法显示
    解决方案:使用BorderLayout布局将其NROTH进行对三个按钮的分布
    实现代码:

    private void addComponent() {
    		this.add(this.titleLabel, BorderLayout.NORTH);
    		JPanel btnPanel = new JPanel();
    		btnPanel.setLayout(null); // 清除JPanel的布局
    		this.add(btnPanel);
    		btn1.setBounds(65, 20, 100, 50); // 定义按钮边界位置
    		btnPanel.add(btn1);
    		btn2.setBounds(185, 20, 100, 50); // 定义按钮边界位置
    		btnPanel.add(btn2);
    		btn3.setBounds(305, 20, 100, 50); // 定义按钮边界位置
    		btnPanel.add(btn3);
    	}
    

    问题4:用户登陆时,密码输入后完全显示,调用JPasswordField方法后出现错误
    原因:getPassword()方法的到的是一个char型数组。
    解决方案:要想将其进行密码的验证,由于用户类的密码是String类,必须将其转换为String类才能继续进行验证。
    实现代码:

    public void findUserItem(){
    	String addName = addNameText.getText();
    	char[] a = addKeyText.getPassword();
    	String addKey=String.valueOf(a);
    	boolean Success = UpServies.findUserData(addName,addKey);
    	if(Success){
    		showUserDialog();
    	}else{
    		JOptionPane.showMessageDialog(this, "用户名或密码错误");
    	}		
    }
    

    欢迎界面:

    管理员界面:

    用户登录界面:

    用户注册界面:

    购买界面:

    (三)代码托管

    • 码云commit历史截图

  • 相关阅读:
    Atitit 编程语言编程方法的进化演进 sp  COP ,AOP ,SOP
    Atitit 2016年attilax事业成就表
    Atitit 知识管理的重要方法 数据来源,聚合,分类,备份,发布 搜索
    Atitit webservice发现机制 WS-Discovery标准的规范attilax总结
    Atitit 多元化战略 适合我们发展 的核心业务attilax总结
    Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结
    Atitit. 提升存储过程与编程语言的可读性解决方案v3 qc25.docx
    Atitit zxing二维码qr码识别解析
    Atitit Data Matrix dm码的原理与特点
    Atitit 常用二维码对比(QR、PDF417、DM、汉信码 Aztec code maxicode
  • 原文地址:https://www.cnblogs.com/hc395071675/p/6815925.html
Copyright © 2011-2022 走看看