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

来自CloudWiki
跳转至: 导航搜索
设置初始化窗口时,加载所有数据
第1行: 第1行:
 
完成商品购买功能,效果如下图所示:
 
完成商品购买功能,效果如下图所示:
 +
 +
[[文件:java9-24.png]]
  
 
完成购物车信息查看功能,效果如下图所示:
 
完成购物车信息查看功能,效果如下图所示:
 +
 +
[[文件:java9-25.png]]
 +
 
==初始任务:添加事件监听器==
 
==初始任务:添加事件监听器==
 +
 
===为按钮添加事件处理程序===
 
===为按钮添加事件处理程序===
 
查询按钮:
 
查询按钮:

2018年6月1日 (五) 22:40的版本

完成商品购买功能,效果如下图所示:

Java9-24.png

完成购物车信息查看功能,效果如下图所示:

Java9-25.png

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

为按钮添加事件处理程序

查询按钮:

btnQuery.addActionListener(new QueryAction());

购买按钮:

btnBuy.addActionListener(new BuyAction());

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

/**
     * 
     * 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);
		}
	 }

购买按钮的监听器:

/**
     * 
     * 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)

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

  /**
     * 
     * 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);
		}
	 }

定义显示书籍数据的函数

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()
			});
		}
    }

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

在initial函数中添加如下代码:

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

终极任务:完成商品购买

第一步:启动Eclipse,导入Java Project,工程名为Project0901。

第二步:为按钮购买添加单击事件,业务逻辑如下:

  1. 获取用户在商品表格(JTable)中选取的商品(书籍)信息。
  2. 如果用户没有选取任何商品,则弹出提示框:请选择您需要购买的商品。
  3. 把用户选取的商品(书籍)添加入购物车。
  4. 如果购买数量大于库存数,则弹出提示框:书籍:《x》仅剩x本,无法满足您的购买需要。(该信息来自于购物车的购买异常CartyException)
  5. 购买成功后将商品加入购物车。
  6. 更新商品表格(JTable)中对应商品库存数。
  7. 在BookListForm窗体中显示购物车中已购买的商品总数。

具体代码如下:

btnBuy.addActionListener(e->{
			//获取用户在商品表格中选择的行
			int selectRow=tblBook.getSelectedRow();
			//当用户没有选择商品时
			if(selectRow<0) {
				JOptionPane.showMessageDialog(frame, "请选择你所需要购买的商品","错误信息",JOptionPane.WARNING_MESSAGE);
				return;
			}
			//获取用户购买的商品
			Book book=null;
			String bid=tblBook.getModel().getValueAt(selectRow, 0).toString();
			book=bookDao.queryBook(bid);
			//询问顾客购买商品数量
			int quantity=Integer.parseInt(JOptionPane.showInputDialog("你需要购买"+book.getName()+" 数量是:"));
			try {
				user.getCart().buy(book, quantity);
			}catch(CartException e1) {
				JOptionPane.showInternalMessageDialog(frame, e1.getMessage(),"错误信息",JOptionPane.WARNING_MESSAGE);
			}
			//购买后获取购物车种商品数量
			int goodsQuantity=user.getCart().size();
			//显示购物车中的数据
			lblQuantity.setText(goodsQuantity+"件");
			//修改表格数据
			tblBook.getModel().setValueAt(book.getNumber(), selectRow, 3);
			
});

第三步:为“查看详情”添加事件,单击鼠标左键弹出购物车详细信息:

lblCartDetail.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				if(arg0.getButton()==MouseEvent.BUTTON1) {
					JOptionPane.showMessageDialog(frame, user.getCart().toString(),"购物车信息",JOptionPane.INFORMATION_MESSAGE);
				}
			}
	});

返回 Java程序设计