“Java任务:完成商品购买并显示购物车详细信息”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
第1行: 第1行:
完成商品购买功能,效果如下图所示:
+
==前情回顾==
 +
上节课我们主要实现了商品信息的查看页面,分为客户端和管理端。
 +
 
 +
客户端:
 +
 
 +
[[文件:java9-2.png]]
 +
 
 +
管理端:
 +
 
 +
[[文件:java9-21.png]]
 +
 
 +
==任务描述==
 +
这节课我们在此基础上实现按钮的监听器
 +
 
 +
以客户端为例,一点击购买按钮,效果如下图所示:
  
 
[[文件:java9-24.png]]
 
[[文件:java9-24.png]]
  
完成购物车信息查看功能,效果如下图所示:
+
以客户端为例,一点击查看详情标签,,效果如下图所示:
  
 
[[文件:java9-25.png]]
 
[[文件:java9-25.png]]

2018年6月2日 (六) 01:14的版本

前情回顾

上节课我们主要实现了商品信息的查看页面,分为客户端和管理端。

客户端:

Java9-2.png

管理端:

Java9-21.png

任务描述

这节课我们在此基础上实现按钮的监听器

以客户端为例,一点击购买按钮,效果如下图所示:

Java9-24.png

以客户端为例,一点击查看详情标签,,效果如下图所示:

Java9-25.png

初始任务:添加事件监听器

现在我们先尝试为窗体上的按钮添加最基本的事件处理程序。

为查询按钮添加事件处理程序

查询按钮:

btnQuery.addActionListener(new QueryAction());


查询按钮的监听器(内部类):

/**
     * 
     * QueryAction:查询按钮的事件监听器
     *
     */
    private class QueryAction implements ActionListener{
		
		public QueryAction(){
			
		}
		@Override
		public void actionPerformed(ActionEvent e) {
				// 获取用户输入的账号和密码
				String gName = textGoodsName.getText();			
				
				JOptionPane.showMessageDialog(null, gName, "信息", JOptionPane.INFORMATION_MESSAGE);
		}
	 }

为购买按钮添加事件处理程序

购买按钮:

btnBuy.addActionListener(new BuyAction());

购买按钮的监听器:

/**
     * 
     * BuyAction:购买按钮的事件监听器
     *
     */
    private class BuyAction implements ActionListener{
		
		public BuyAction(){
			
		}
		@Override
		public void actionPerformed(ActionEvent e) {
				
				String gName = textGoodsName.getText();	
				
				JOptionPane.showMessageDialog(null, gName, "信息", JOptionPane.INFORMATION_MESSAGE);
		}
	 }

任务进阶:关联业务逻辑层(MVC)

下面,我们对刚才这个基本的查询事件监听器改造一下,里面加上调用业务逻辑层代码的内容

这一步,需要把以前编写的dao包、entity包、service等包复制到当前工程内。

改写查询按钮的事件处理程序

  /**
     * 
     * QueryAction:查询按钮的事件监听器
     *
     */
    private class QueryAction implements ActionListener{
		
		public QueryAction(){
			
		}
		@Override
		public void actionPerformed(ActionEvent e) {
				// 获取用户输入的账号和密码
				String gID = textGoodsID.getText();							
				//JOptionPane.showMessageDialog(null, gID, "信息", JOptionPane.INFORMATION_MESSAGE);
				Goods mygoods =gs.queryGoods(gID);
				ArrayList<Goods> goods=new ArrayList<>();
				goods.add(mygoods);
				showBooks(goods);
		}
	 }

在上面的代码中,调用了显示书籍数据的函数showBooks:

private void showBooks(ArrayList<Goods> goods){
    	//在表格中显示数据
 		DefaultTableModel dt=(DefaultTableModel) tblGoods.getModel();
 		dt.setRowCount(0);
 		//判断是否查询到了满足条件的书籍信息
 		if(goods==null||goods.size()==0) {
 					JOptionPane.showMessageDialog(frame, "没有满足条件的书籍信息","警告信息",JOptionPane.WARNING_MESSAGE);
 					return;
 		}
 		for(int i=0;i<goods.size();i++) {
			Goods g=goods.get(i);
			dt.insertRow(i, new Object[] {
					g.getId(),g.getName(),g.getNumber(),g.getPrice(),
					g.getTag().toString()
			});
		}
    }

改写购买按钮的事件处理程序

下面我们为下方的购买按钮加上调用业务逻辑层代码的内容,业务逻辑如下:

  1. 获取用户在商品表格(JTable)中选取的商品(书籍)信息。
  2. 如果用户没有选取任何商品,则弹出提示框:请选择您需要购买的商品。
  3. 把用户选取的商品(书籍)添加入购物车。
  4. 如果购买数量大于库存数,则弹出提示框:书籍:《x》仅剩x本,无法满足您的购买需要。(该信息来自于购物车的购买异常CartyException)
  5. 购买成功后将商品加入购物车。
/**
     * 
     * BuyAction:购买按钮的事件监听器
     *
     */
    private class BuyAction implements ActionListener{
		
		public BuyAction(){
			
		}
		@Override
		public void actionPerformed(ActionEvent e) {
				// 获取用户输入的账号和密码
				//String gID = textGoodsID.getText();	
				
				//JOptionPane.showMessageDialog(null, gID, "信息", JOptionPane.INFORMATION_MESSAGE);
				//获取用户在商品表格中选择的行
				int selectRow = tblGoods.getSelectedRow();
				//当用户没有选择商品时
				if(selectRow<0) {
					JOptionPane.showMessageDialog(frame, "请选择你所需要购买的商品","错误信息",JOptionPane.WARNING_MESSAGE);
					return;
				}
				//获取用户购买的商品
				Goods g=null;
				String id=tblGoods.getModel().getValueAt(selectRow, 0).toString();
				g=gs.queryGoods(id);
				//询问顾客购买商品数量
				int quantity=Integer.parseInt(JOptionPane.showInputDialog("你需要购买"+g.getName()+" 数量是:"));
				try {
					cs.addToCart(g, quantity);
					
				}catch(Exception e1) {
					JOptionPane.showInternalMessageDialog(frame, e1.getMessage(),"错误信息",JOptionPane.WARNING_MESSAGE);
				}
				//购买后获取购物车种商品数量
				int goodsQuantity=cs.getNum();
				//显示购物车中的数据
				lblQuantity.setText(goodsQuantity+"件");				
		}
	 }

设置初始化窗口时,加载所有数据

最后,在initial函数中添加如下代码,以便在窗口初始化时,加载所有数据:

//展示所有商品
ArrayList<Goods> goods=gs.queryGoods();		
showBooks(goods);

终极任务:显示购买情况

最后,我们为“查看详情”添加事件,单击鼠标左键弹出购物车详细信息: 查看详情标签:

btn_Check.addMouseListener(new CheckMouse());

相应的鼠标监听器:

/*CheckAction:查看详情的监听器
     * 
     */
    private class CheckMouse implements  MouseListener{
    	public CheckMouse(){
    		
    	}
    	@Override
    	public void mousePressed(MouseEvent e){}
		public void mouseClicked(MouseEvent e){
			if(e.getButton()==MouseEvent.BUTTON1) {
				JOptionPane.showMessageDialog(frame, cs.getCart(),"购物车信息",JOptionPane.INFORMATION_MESSAGE);
			}
		}
		public void mouseReleased(MouseEvent e){}
		public void mouseEntered(MouseEvent e){}
		public void mouseExited(MouseEvent e){}
    }

返回 Java程序设计