“Java任务:商品信息检索之客户端”的版本间的差异
小 |
|||
第42行: | 第42行: | ||
[[文件:java9-4.png]] | [[文件:java9-4.png]] | ||
− | === | + | ===添加各个子面板=== |
+ | |||
设置默认面板的布局方式: | 设置默认面板的布局方式: | ||
第138行: | 第139行: | ||
==事件响应== | ==事件响应== | ||
− | |||
− | + | ===为“查询”按钮添加响应事件=== | |
− | + | 双击图形界面中“查询”按钮,即可进入其响应事件的编写: | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | <nowiki> 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 | + | goods.add(mygoods);goods.add(mygoods2); |
− | |||
− | |||
showGoods(goods); | showGoods(goods); | ||
+ | JOptionPane.showMessageDialog(null, "'"+type+"'查询成功!", "信息", JOptionPane.INFORMATION_MESSAGE); | ||
} | } | ||
});</nowiki> | });</nowiki> | ||
+ | |||
+ | 显示数据的函数showGoods(): | ||
+ | |||
<nowiki> | <nowiki> | ||
第170行: | 第172行: | ||
Goods g=goods.get(i); | Goods g=goods.get(i); | ||
dt.insertRow(i, new Object[] { | dt.insertRow(i, new Object[] { | ||
− | g.getId(),g.getName(),g.getNum(),g.getPrice() | + | g.getId(),g.getName(),g.getPrice(),g.getNum(),g.getPrice()*g.getNum() |
}); | }); | ||
} | } | ||
− | }</nowiki> | + | } |
+ | </nowiki> | ||
+ | |||
+ | ===为"购买”按钮添加响应事件=== | ||
+ | <nowiki> | ||
+ | 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); | ||
+ | |||
+ | } | ||
+ | });</nowiki> | ||
+ | ===退出系统的响应事件=== | ||
+ | |||
+ | <nowiki> | ||
+ | lbllogout.addMouseListener(new MouseAdapter() { | ||
+ | @Override | ||
+ | public void mouseClicked(MouseEvent e) { | ||
+ | MyCon.disConn(); | ||
+ | GoodsShow.this.dispose(); | ||
+ | |||
+ | } | ||
+ | });</nowiki> | ||
+ | |||
+ | ===其他按钮的响应事件=== | ||
+ | 由于还未连接后台,其他按钮如查看详情按钮,可暂不编写响应事件。 | ||
+ | |||
==程序代码== | ==程序代码== |
2020年6月19日 (五) 10:21的版本
目录
任务描述
任务描述:实现商品检索界面
客户端界面
客户端实现商品的查询、购买,和查改购买情况
管理端
管理端实现商品的上架、下架、查询和修改功能
任务实现
下面以客户端为例,讲解实现的步骤。
构建初始窗体
打开你的Java Project
选择window builder下的 swing下的JFrame或者Application Window
给生成的窗体起名字,如我的命名为GoodsShow.
进入视图界面
在类名上单击右键,选择 Open With WindowBuilder Editor,如图2所示
在类编写窗口的底部选择【Design】标签。
添加各个子面板
设置默认面板的布局方式:
这里推荐使用绝对布局(absolute layout),添加组件更方便、自由。
绝对布局,顾名思义,就是给每个元素指定上起始点和长、宽、高,使用它的物理长度值进行定位和布局
根据界面的需要,我们可以向默认面板中4个子面板
其中第1、2、4个面板为普通的JPanal ,注意设置其布局方式为绝对布局
第3个面板为JScrollPane
面板1、2添加元素
按照下图,把对应控件拖入窗体到指定位置,完成商品检索区域的构建,并设置各个控件的【Variable】属性:
各组件参考命名:
欢迎你 -> lblUser ; 退出系统 -> lbllogout 商品名 -> lblGoodsName ;输入框 ->GoodsNameField ;分类标签 -> lblType ;分类下拉框-> TypeBox ;查询 -> btnQuery
分类下拉框的设置
- 选中分类组合框,在左侧的Properties窗口中找到Model这栏,如图:
- 点击上图的“…”添加如下图所示的三个分类:
每新添加一个记录,就插入一个新行就行
面板3:表格的创建
按照下图,完成商品显示区域的构建:
图 1-8
- 把JScrollPane拖到界面中,并拉伸成上图大小。
- 把商品列表JTable嵌到JScrollPane:必须要把JTable控件拖入JScrollPane的Viewport区域中才能显示,拖入的区域如下图中的黄色区域所示:
图 7 JScollPane布局
- 设置表头标题:
点击左侧控件列表中的JTable控件。
图 1-10
在属性列表中找到【model】,点击【…】打开表格编辑框:
图 8 表格编辑对话框
点击【Columns】区域的【Insert】插入一列, 在底部的列属性区域中设置【Title】为总价:,设置列宽【Pref.width】为:164
按照以上步骤,依次添加如下表头信息:
列名:数量,列宽:70 列名:价格,列宽:70 列名:商品名称,列宽:150 列名:商品编号,列宽:70
面板4:购买区域的创建
按照下图,完成商品购买区域的构建:
- "购物车商品数": 标签 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) { MyCon.disConn(); 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程序设计