Java任务:商品信息检索之客户端

来自CloudWiki
Cloud17讨论 | 贡献2020年6月19日 (五) 10:30的版本 退出系统的响应事件
跳转至: 导航搜索

任务描述

任务描述:实现商品检索界面

客户端界面

客户端实现商品的查询、购买,和查改购买情况

Java2020-12-27.png

管理端

管理端实现商品的上架、下架、查询和修改功能

Java2020-12-28.png

任务实现

下面以客户端为例,讲解实现的步骤。

构建初始窗体

打开你的Java Project

在src下,或者对应的包下,右键new-other Java9-32.png

选择window builder下的 swing下的JFrame或者Application Window

Java9-33.png

给生成的窗体起名字,如我的命名为GoodsShow.

进入视图界面

在类名上单击右键,选择 Open With WindowBuilder Editor,如图2所示

Java9-3.png


在类编写窗口的底部选择【Design】标签。

Java9-4.png

添加各个子面板

设置默认面板的布局方式:

Java9-27.png

这里推荐使用绝对布局(absolute layout),添加组件更方便、自由。

绝对布局,顾名思义,就是给每个元素指定上起始点和长、宽、高,使用它的物理长度值进行定位和布局

根据界面的需要,我们可以向默认面板中4个子面板

其中第1、2、4个面板为普通的JPanal ,注意设置其布局方式为绝对布局

第3个面板为JScrollPane

Java9-14.png

Java2020-12-29.png

面板1、2添加元素

按照下图,把对应控件拖入窗体到指定位置,完成商品检索区域的构建,并设置各个控件的【Variable】属性:

Java2020-12-30.png

各组件参考命名:

欢迎你 -> lblUser ; 退出系统 -> lbllogout 
商品名 -> lblGoodsName ;输入框 ->GoodsNameField  ;分类标签 -> lblType ;分类下拉框-> TypeBox ;查询 -> btnQuery

Java2020-12-31.png

分类下拉框的设置

  • 选中分类组合框,在左侧的Properties窗口中找到Model这栏,如图:

Java9-6.png


  • 点击上图的“…”添加如下图所示的三个分类:

每新添加一个记录,就插入一个新行就行

Java2020-12-26.png

面板3:表格的创建

按照下图,完成商品显示区域的构建:

Java9-8.png

图 1-8

  • 把JScrollPane拖到界面中,并拉伸成上图大小。
  • 把商品列表JTable嵌到JScrollPane:必须要把JTable控件拖入JScrollPane的Viewport区域中才能显示,拖入的区域如下图中的黄色区域所示:

Java9-9.png

图 7 JScollPane布局

  • 设置表头标题:

点击左侧控件列表中的JTable控件。

Java9-10.png

图 1-10

在属性列表中找到【model】,点击【…】打开表格编辑框:

Java9-11.png

图 8 表格编辑对话框

点击【Columns】区域的【Insert】插入一列, 在底部的列属性区域中设置【Title】为总价:,设置列宽【Pref.width】为:164

按照以上步骤,依次添加如下表头信息:

列名:数量,列宽:70
列名:价格,列宽:70
列名:商品名称,列宽:150
列名:商品编号,列宽:70

面板4:购买区域的创建

按照下图,完成商品购买区域的构建:

Java2020-12-32.png

  • "购物车商品数": 标签 lblTotal
  • "0件":标签 lblQuantity
  • "查看详情" : 标签 lblCart
  • "购买": 标签 btnBuy

事件响应

为“查询”按钮添加响应事件

双击图形界面中“查询”按钮,即可进入其响应事件的编写:

		btnQuery.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String goodsname = GoodsNameField.getText();
				ArrayList<Goods> goods=new ArrayList<>();
				String type =(String)TypeBox.getSelectedItem();
				JOptionPane.showMessageDialog(null, "您选择的是"+type, "信息", JOptionPane.INFORMATION_MESSAGE);

				//生成几个假数据 来模拟演示一下,真实软件这里应该调用业务逻辑层,
				Goods mygoods = new Goods("01",goodsname,15.0f,2);
				Goods mygoods2 = new Goods("02","山西刀削面",10.0f,2);
				//
				goods.add(mygoods);goods.add(mygoods2);
				showGoods(goods);
				JOptionPane.showMessageDialog(null, "'"+type+"'查询成功!", "信息", JOptionPane.INFORMATION_MESSAGE);
			}
		});

显示数据的函数showGoods():


	private void showGoods(ArrayList<Goods> goods){
    	//在表格中显示数据
 		DefaultTableModel dt=(DefaultTableModel) table.getModel();
 		dt.setRowCount(0);
 		
 		for(int i=0;i<goods.size();i++) {
			Goods g=goods.get(i);
			dt.insertRow(i, new Object[] {
					g.getId(),g.getName(),g.getPrice(),g.getNum(),g.getPrice()*g.getNum()
					
			});
		}
    }

为"购买”按钮添加响应事件

btnBuy.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//获取用户在商品表格中选择的行
				int selectRow = table.getSelectedRow();
				int gid;
	
				//当用户没有选择商品时
				if(selectRow<0) {
					JOptionPane.showMessageDialog(null, "请选择你所需要购买的商品","错误信息",JOptionPane.WARNING_MESSAGE);
					return;
				}else {
					String id =(String)table.getModel().getValueAt(selectRow, 0);
					gid=Integer.valueOf(id);
					JOptionPane.showMessageDialog(null, "您选择的是"+gid+"号商品", "信息", JOptionPane.INFORMATION_MESSAGE);
				}
								
				//询问顾客购买商品数量
				int quantity=Integer.parseInt(JOptionPane.showInputDialog("你需要购买数量是:"));
				JOptionPane.showMessageDialog(null, "您选择的是"+gid+"号商品,购买数量为"+quantity, "信息", JOptionPane.INFORMATION_MESSAGE);
	
			}
		});

退出系统的响应事件

lbllogout.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				
				GoodsShow.this.dispose();
				
			}
		});

其他按钮的响应事件

由于还未连接后台,其他按钮如查看详情按钮,可暂不编写响应事件。


程序代码

package main;

import java.awt.*;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;



/*实训:Java任务:图书信息检索  (代码编程版) */
public class BookListForm  {
	private JFrame frame;
	private JLabel lblName;
	private JLabel lblCity;
	
	private JTextField txtBookName;
	private JLabel lblCategory;
	private JTable tblBook;
	/**
	 * 构造函数
	 */
	public BookListForm() {
		initialize();
	}
	
	/**
	 * 窗体初始化
	 */
	private void initialize() {
		frame = new JFrame();
		
		frame.setResizable(true);
		//frame.setLayout(null);
		frame.setLayout(null);
		
		//上半部分
		JPanel  panel1=new JPanel();
		panel1.setLayout(null);
		panel1.setBounds(0, 0, 550, 45);
		
		lblName = new JLabel("您好");
		lblName.setBounds(10, 10, 131, 15);
		panel1.add(lblName);
		
		lblCity = new JLabel("来自于:");
		lblCity.setBounds(271, 10, 90, 15);
		panel1.add(lblCity);
		
		JSeparator separator = new JSeparator();
		separator.setBounds(10, 35, 550, 10);
		panel1.add(separator);
		
		frame.getContentPane().add(panel1);
		/*
		String[] names = { "姓名", "语文", "数学", "总分", "作弊" };
		Object[][] scores = { { "张三", new Integer(66), new Integer(32), new Integer(98), new Boolean(false) },
				{ "李四", new Integer(82), new Integer(69), new Integer(128), new Boolean(true) }, };
		JTable table=new JTable(scores,names);//创建表格对象
		
		JScrollPane scrollPane = new JScrollPane(table);//将表格添加到(滚动)面板中
		table.setFillsViewportHeight(true);
		frame.add(scrollPane,BorderLayout.CENTER);
		
		*/
		
		JPanel panel2=new JPanel();
		panel2.setLayout(null);
		panel2.setBounds(0, 45, 550, 20);
		
		//书籍名的 标签
		JLabel lblBookName = new JLabel("书籍名:");
		lblBookName.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		lblBookName.setBounds(10, 2, 50, 20);
		panel2.add(lblBookName);
				//输入书籍名的文本框
		txtBookName = new JTextField();
		txtBookName.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		txtBookName.setBounds(65, 2, 130, 20);
		panel2.add(txtBookName);
		txtBookName.setColumns(10);
						
		//分类的标签
		JLabel lblCategory = new JLabel("分类:");
		lblCategory.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		lblCategory.setBounds(225, 2, 65, 20);
		panel2.add(lblCategory);
				
		//选择分类的复选框
	    JComboBox cboCategory= new JComboBox();
		cboCategory.setModel(new DefaultComboBoxModel(new String[] {"- 请选择 -", "工具类 > 软件编程", "小说类 > 历史"}));
		cboCategory.setFont(new Font("微软雅黑", Font.PLAIN, 14));
		cboCategory.setBounds(260, 2, 145, 20);
		panel2.add(cboCategory);
		JButton btnQuery = new JButton("查询");
		btnQuery.setBounds(441, 2, 78, 20);
		panel2.add(btnQuery);
		
		frame.getContentPane().add(panel2);	
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 90, 550, 265);
		frame.getContentPane().add(scrollPane);
		
		//tblBook = new JTable();
		String[] names = { "编号","商品名称", "价格", "数量",  "标签" };
		Object[][] scores = { { "01", "think in java", new Float(50.0f), new Integer(50), "软件编程" },
				{ "03", "think in java", new Float(50.0f), new Integer(40), "软件编程"}, 
				{"03", "射雕英雄传", new Float(30.0f), new Integer(30), "文学经典" },
			};
		
		
		JTable tblBook=new JTable(scores,names);//创建表格对象
		scrollPane.setViewportView(tblBook);
		
		JPanel panel3=new JPanel();
		panel3.setLayout(null);
		panel3.setBounds(0, 355, 550, 45);
		
		JLabel lblCart = new JLabel("购物车商品数:");
		lblCart.setBounds(10, 10, 91, 15);
		panel3.add(lblCart);
		
		
		JLabel lblQuantity = new JLabel("0件");
		lblQuantity.setBounds(104, 10, 54, 15);
		panel3.add(lblQuantity);
		
		
		JLabel lblCartDetail = new JLabel("查看详情");
		lblCartDetail.setForeground(Color.BLUE);
		lblCartDetail.setBounds(179, 10, 54, 15);
		panel3.add(lblCartDetail);
		
		JButton btnBuy = new JButton("购买");
		btnBuy.setBounds(441, 10, 78, 23);
		panel3.add(btnBuy);
		frame.getContentPane().add(panel3);
		
		
		frame.setTitle("电商购物平台-商品查询页面");
		frame.setBounds(100, 100, 550, 450);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		setCenter(frame);
	
		
		
		
		
		
		
		
		
		
	}
	
	/**
	 * 窗体自动居中
	 * 
	 * @param window
	 */
	private void setCenter(JFrame window) {
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		int width = window.getWidth();
		int height = window.getHeight();
		window.setBounds((d.width-width)/2, (d.height-height)/2, width, height);
	}
	public JFrame getFrame() {
		return frame;
	}

	public void setFrame(JFrame frame) {
		this.frame = frame;
	}
	public static void main(String[] args) {
		
		BookListForm bookForm = new BookListForm();
     
		
	}
	
	
}

返回 Java程序设计