• Java第七次作业--图形用户界面


    Java第七次作业--图形用户界面


    (一)学习总结


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

    addActionListener接口用于监听器,例如以下添加监听器的函数:

    	private void addListener(){
    		btn.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				showAdminDialog();
    			}
    		});
    	}
    private void showAdminDialog(){
    	this.setVisible(false);
    	new AdminDialog().setVisible(true);
    }
    

    showAdminDialog函数表示显示管理者的窗口。其他的操作基本和这个类似。

    1.1 WindowListener监听器,用于windows系统下的处理窗体时间的监听器。

    1.2 actionPerformed关键字是用于处理按钮的动作时间,例如注册的按钮,当点击下去就出现一个Frame,和上述代码基本相似。

    1.3键盘事件及监听事件,使用KeyListener接口使用。

    1.4鼠标事件及监听器,常用于鼠标按下松开,使用MouseListener接口

    1.5鼠标拖拽事件及监听器,使用MouseMotionListener

    1.6其他的事件例如单选按钮JRadioButton事件处理,JCheckBox事件处理,JList事件处理等,都需要各自的接口实现,其基本方法跟 addActionListener类似。

    实验中使用的都是 addActionListener的事件处理。


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

    实验总结进行总结。


    (二)实验总结

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

    程序设计思路:1,创建一个动物类;
    2,创建一个库,用来存宠物的数据,因为要存数据,所有要使用static关键字进行封装;
    3,创建一个Dao文件,用于对数据的各种操作,增删改查等操作;
    4,AdminServiceDao中的数据进行更新;
    5,设置欢迎界面,Welcome对面板进行设计;
    6,AdminDialog设计各种功能,包括显示所有宠物列表,添加,修改等。



    需要注意的问题:1,在写Welcome类的时候需要继承Object的JFrame,否则无法使用setVisible进行显示。

    2,将图形设置好之后,设置按钮同时并为按钮设置监听器,然后添加相应的方法来响应按钮的事件操作。以添加动物来举例(部分代码):

    private JButton addBtn=new JButton("添加");
    public void addComponent(){
    		addIdText.setBounds(50, 280, 80, 25);
    		addKindText.setBounds(150, 280, 80, 25);
    		addAgeText.setBounds(250,280,80,25);
    		addNumberText.setBounds(350,280,80,25);
    		addPriceText.setBounds(450,280,80,25);
    		this.add(addIdText);
    		this.add(addKindText);
    		this.add(addAgeText);
    		this.add(addNumberText);
    		this.add(addPriceText);
    }
    public void addListener(){
    		//“添加”按钮的监听器
    		addBtn.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				addItem();  //调用添加方法
    			}
    		});
    public void addItem(){
    	String addId=addIdText.getText();
    	String addKind=addKindText.getText();
    	String addAge=addAgeText.getText();
    	String addNumber=addNumberText.getText();
    	String addPrice=addPriceText.getText();
    	boolean addSuccess = adminService.addAnimalItem(addId, addKind, addAge, addNumber,addPrice);
    	if(addSuccess){
    		queryItem();				//添加后刷新表格
    		addIdText.setText("");
    		addKindText.setText("");
    		addAgeText.setText("");
    		addNumberText.setText("");
    		addPriceText.setText("");
    	}else{
    		JOptionPane.showMessageDialog(this, "编号重复,请查看编号后进行添加");		//没有添加成功弹窗错误提示
    	}
    }
    

    其中需要调用adminService的addAnimalItem方法来进行添加

    public boolean addAnimalItem(String id,String kind,String age,String number,String price){
    		ArrayList<AnimalItem> data = queryItem();
    		Iterator<AnimalItem> iterator = data.iterator();
    		while(iterator.hasNext()){
    			AnimalItem animal = iterator.next();
    			//如果存在重复编号则添加不成功
    			if(animal.getId().equals(id)){
    				return false;
    			}			
    		}
    		AnimalItem thisAnimal = new AnimalItem(id,kind,Double.parseDouble(age),number,Double.parseDouble(price));
    		adminDao.addFruitItem(thisAnimal);  //添加成功
    		return true;
    	}
    

    其他的按钮也是相似,只不过是Service中的方法不一样。

    3,方法必须在构造方法中进行显示调用。


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

    设计思路:基本上跟实验一没什么区别,区别在与新增了用户类,用户界面,和Service中的用户界面需要显示的方法。
    新增用户注册和登录,默认账户和密码在新建一个DataBase中存储。

    package userEnroll;
    import java.util.ArrayList;
    public class DataBase {
    	public static ArrayList<User> data = new ArrayList<User>();
    	static{
    		data.add(new User("chen","123"));		
    	}
    }
    

    重写Dao文件,和Service,基本和实验一一样,还不过访问的数据是用户类的数据。


    写注册的面板,设计好之后添加监听器,当点击确定后,事件响应并提示注册成功,同时跳转至登录界面。

    登录面板,基本跟注册一样,只不过在点击登录之后进行判断是否和存的数据一样,如果不一样则提示没有进行注册,如果登录成功,则进入用户界面

    用户界面的设计,用按钮来显示各种功能,然后设置监视器来进行事件响应。


    对各个功能进行的阐述:
    1,显示所有的宠物,将集合中存的所有的数据进行输出。访问adminSerice进行访问数据,然后进行设置成为字符串,如下:

    public void queryItem(){
    		//定义表头
    		String []thead={"宠物编号","宠物种类","宠物年龄","宠物数量","宠物单价(/RMB)"};
    		//调用adminService的查询服务
    		ArrayList<AnimalItem> dataList = adminService.queryItem();
    		//将查询到的集合转为数组,方便为JTable赋值
    		String[][] tbody = listToArray(dataList);
    		//将查询到的结果为table赋值
    		TableModel dataModel = new DefaultTableModel(tbody,thead);
    		table.setModel(dataModel);	
    	}
    	private String[][] listToArray(ArrayList<AnimalItem> list){
    		String [][]tbody=new String [list.size()][5];
    		for(int i=0;i<tbody.length;i++){
    			AnimalItem animal=list.get(i);
    			tbody[i][0]=animal.getId();
    			tbody[i][1]=animal.getKind();
    			tbody[i][2]=animal.getAge()+"";
    			tbody[i][3]=animal.getNumber();
    			tbody[i][4]=animal.getPrice()+"";
    		}
    		return tbody;
    	}
    

    2,按照种类进行查找宠物:所有的功能都在adminSerice中进行编写,对static修饰的data集进行迭代,然后判断是否相同,若相同则返回给now新增的List集。

    	//按照宠物的种类进行查找的服务 
    	public ArrayList<AnimalItem> toChaZhao(String ikind){
    		ArrayList<AnimalItem> data=adminDao.queryAllData();
    		ArrayList<AnimalItem> now=null;				//定义一个List集来接受传进来相同的动物类
    		now=new ArrayList<AnimalItem>();			//实例化否则出现nullPoint指针为null
    		Iterator<AnimalItem> itrator=data.iterator();		//对数据进行迭代
    		while(itrator.hasNext()){
    			AnimalItem animal=itrator.next();
    			if(animal.getKind().equals(ikind)){				//判断是否相等
    				now.add(animal);		//将查找出来的给了now,然后返回即可 
    			}
    		}
    		return now;
    	}
    

    3,购买宠物:基本和查找相似,只不过将查找出来的数存进去,然后进行输出。具体操作:先在DataBase中定义static的集buy进行存储,然后在显示列表中进行使用即可。

    //购买并列单
    public ArrayList<AnimalItem> toBuy(String id){
    	ArrayList<AnimalItem> data=adminDao.queryAllData();
    	/*ArrayList<AnimalItem> ibuy=null;
    	ibuy=new ArrayList<AnimalItem>();*/
    	
    	Iterator<AnimalItem> itrator=data.iterator();		//对数据进行迭代
    	while(itrator.hasNext()){
    		AnimalItem animal=itrator.next();
    		if(animal.getId().equals(id)){
    			DataBase.buy.add(animal);
    			return DataBase.buy;
    		}
    	}
    	return null;
    }
    

    4,显示购买的宠物:将购买后的宠物存在buy中,然后在adminDao中编写all()函数,用于返回购买的宠物所有的信息,然后在AdminService中编写列表函数

    	public ArrayList<AnimalItem> all(){
    		return DataBase.buy;
    	}
    

    AdminService中的函数

    	//fanhui buy shuju 
    	public ArrayList<AnimalItem> toList(){
    		ArrayList<AnimalItem> data=adminDao.all();
    		return data;
    	}
    

    5:退出:退出的方法有多种,其中最简单的一种是使用setVisible(false)方法进行退出。但是这样的方式是在电脑上程序上仍然启动着,占用内存。
    代码如下:
    设置exit的大小以显示exit按钮

    	exit.setBounds(400,300,170,25);
    	this.add(exit);
    

    添加监听器:

    public void addListener(){
    		exit.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				toExit();
    			}
    		});
    	}
    public void toExit(){
    		this.setVisible(false);
    	}
    

    总结:最大的问题出在购买宠物并列单:因为是采用两个面板,也就是两个类,所以按照输进去的文本信息来输出该宠物必须定义static修饰,但是一直提示存在空指针。原因:调用方法的时候没有将数据存进去集合中,设计的思路有问题。
    正确的思路为:购买之后将数据存进集合中,然后在adminDao中编写得到购买的集合buy的全部元素,然后在adminService中进行调用即可。也就是上述4的过程。

    public static  JTextField buyText=new JTextField(6);
    
    public ArrayList<AnimalItem> all(){
    		return DataBase.buy;
    	}
    

    AdminService中的函数

    	//fanhui buy shuju 
    	public ArrayList<AnimalItem> toList(){
    		ArrayList<AnimalItem> data=adminDao.all();
    		return data;
    	}
    


    有待解决的问题:在输入购买的时候,如果输入已经在清单列表中的元素的时候没有仍能添加。可以更换集合为不可重复添加的集合Set即在DataBase层次将ArrayList更改为Set集。


    (三)代码托管

    点击代码托管即可查看代码
    



    博客网站 https://yamon.top 个人网站 https://yamon.top/resume GitHub网站 https://github.com/yamonc 欢迎前来访问
  • 相关阅读:
    Flutter-常用插件庫
    Flutter-發送短信驗證碼
    Flutter-Radio單選框
    Flater-Provide狀態管理
    android sdk安装
    Android Studio的安装
    Flutter SDK安装(windows)
    Flutter-dialog彈出框
    python中的迭代器与生成器
    python闭包与装饰器
  • 原文地址:https://www.cnblogs.com/chenyameng/p/6842260.html
Copyright © 2020-2023  润新知