面向对象大作业3:为购物车添加GUI

概述

本次作业主要是为之前做的购物车系统添加图形界面,下面展示的是GUI的主要代码和运行的截图

GUI主要代码

组件

使用到的组件主要是JFrame、JPanel、JLable、JScrollPane和JButton

    Mall mall;
    ShoppingCart cart;
    JFrame frame = new JFrame("lwx的购物车");
    JButton shopButton = new JButton("          商城          ");
    JButton cartButton = new JButton("          购物车          ");
    JPanel mainPanel = new JPanel(new CardLayout());
    JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));


    //商城组件
    JPanel mallPanel = new JPanel(new BorderLayout());
    JPanel mallNorth = new JPanel();
    JPanel mallCenter = new JPanel(new BorderLayout());
    JLabel shuxing1 = new JLabel("名称                                价格                                 数量");
    JButton addToCart = new JButton("加入购物车");
    JPanel mallGoodsPanel = new JPanel();
    JScrollPane mallGoods = new JScrollPane(mallGoodsPanel);


    //购物车组件
    JPanel cartPanel = new JPanel(new BorderLayout());
    JPanel cartNorth = new JPanel();
    JPanel cartCenter = new JPanel(new BorderLayout());
    JLabel shuxing2 = new JLabel("名称                                价格                                 数量");
    JPanel cartSouth = new JPanel(new BorderLayout());
    JPanel cartGoodsPanel = new JPanel();
    JScrollPane cartGoods = new JScrollPane(cartGoodsPanel);
    JButton delete = new JButton("删除商品");
    JButton clear = new JButton("清空购物车");
    JButton checkOut = new JButton("结算购物车");

界面设计、展示方法

进入主界面后默认显示商城界面,主界面下方有“商城”和“购物车”两个按钮,点击按钮可以进入对应的界面。商城界面上显示商品的信息以及“加入购物车”的按钮,点击后可以选择商品和数量加入购物车;购物车界面显示商品信息与商城界面差不多,下方有三个按钮,分别为“删除商品”“清空购物车”“结算购物车”。
商城界面
购物车界面
界面设计主要代码如下:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 700);


        //商城界面
        mallNorth.add(new JLabel("商城界面"), BorderLayout.CENTER);
        mallPanel.add(mallNorth, BorderLayout.NORTH);
        mallPanel.add(mallCenter);
        mallCenter.add(shuxing1, BorderLayout.NORTH);
        mallCenter.add(addToCart, BorderLayout.SOUTH);
        mallCenter.add(mallGoods, BorderLayout.CENTER);
        mallGoodsPanel.setLayout(new GridLayout(0, 3));
        mallGoods.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        mallGoods.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        showMallGoods(mallGoodsPanel);



        //购物车界面
        cartNorth.add(new JLabel("购物车界面"), BorderLayout.NORTH);
        cartPanel.add(cartNorth, BorderLayout.NORTH);
        cartCenter.add(shuxing2, BorderLayout.NORTH);
        cartPanel.add(cartCenter);
        cartSouth.add(delete, BorderLayout.WEST);
        cartSouth.add(clear, BorderLayout.CENTER);
        cartSouth.add(checkOut, BorderLayout.EAST);
        cartCenter.add(cartSouth, BorderLayout.SOUTH);
        cartCenter.add(cartGoods, BorderLayout.CENTER);
        cartCenter.add(cartGoods, BorderLayout.CENTER);
        cartGoodsPanel.setLayout(new GridLayout(0, 3));
        cartGoods.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        cartGoods.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        showCartGoods(cartGoodsPanel);


        //按钮监听器
        addToCart.addActionListener(e -> addToCartButton());
        delete.addActionListener(e -> deleteButton());
        clear.addActionListener(e -> clearButton());
        checkOut.addActionListener(e -> checkOutButton());


        mainPanel.add(mallPanel, "Shop");
        mainPanel.add(cartPanel, "Cart");
        CardLayout cardLayout = (CardLayout) mainPanel.getLayout();
        shopButton.addActionListener(e -> cardLayout.show(mainPanel, "Shop"));
        cartButton.addActionListener(e -> cardLayout.show(mainPanel, "Cart"));
        buttonPanel.add(shopButton);
        buttonPanel.add(cartButton);
        frame.add(mainPanel, BorderLayout.CENTER);
        frame.add(buttonPanel, BorderLayout.SOUTH);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

按钮监听器方法

分别为商城和购物车总共四个按钮设计了方法

    public void addToCartButton() {
        JPanel panel = new JPanel(new GridLayout(2, 2));

        // 向面板添加标签和文本框
        panel.add(new JLabel("名称:"));
        JTextField productName = new JTextField(10); // 输入商品名称的文本框
        panel.add(productName);

        panel.add(new JLabel("数量:"));
        JTextField quantity = new JTextField(5); // 输入数量的文本框
        panel.add(quantity);

        // 显示输入对话框
        int result = JOptionPane.showConfirmDialog(null, panel, "请选择要购买的商品和数量", JOptionPane.OK_CANCEL_OPTION);

        // 当点击确定按钮时
        if (result == JOptionPane.OK_OPTION) {
            String name = productName.getText(); // 获取商品名称
            if (name.isEmpty()) {
                // 商品名称为空,弹出提示框
                JOptionPane.showMessageDialog(null, "请输入商品名称", "错误", JOptionPane.ERROR_MESSAGE);
                return; // 终止方法
            }
            int num;
            if (quantity.getText().matches("-?\\d+") && Integer.parseInt(quantity.getText()) >= 1) //若输入为整型数据
                num = Integer.parseInt(quantity.getText()); // 获取商品数量
            else {
                JOptionPane.showMessageDialog(null, "请输入正确的商品数量", "错误", JOptionPane.ERROR_MESSAGE);
                return;
            }


            // 在这里处理获取到的商品名称和数量,可以添加到购物车中或进行其他操作
            // 例如:将商品名称和数量添加到购物车中

            if (mall.search(name) == null)
                JOptionPane.showMessageDialog(null, "没有这个商品", "提示", JOptionPane.INFORMATION_MESSAGE);
            else if (num > (mall.search(name).getInventory()))
                JOptionPane.showMessageDialog(null, "商品库存不足", "提示", JOptionPane.INFORMATION_MESSAGE);
            else {
                mall.deleteGoods(name, num);
                cart.add(mall.search(name), num);
                showMallGoods(mallGoodsPanel);
                showCartGoods(cartGoodsPanel);
                JOptionPane.showMessageDialog(null, "成功将 " + name + " * " + num + "加入购物车!", "提示", JOptionPane.INFORMATION_MESSAGE);
            }
        }
    }

    public void deleteButton() {
        JPanel panel = new JPanel(new GridLayout(2, 2));

        // 向面板添加标签和文本框
        panel.add(new JLabel("名称:"));
        JTextField productName = new JTextField(10); // 输入商品名称的文本框
        panel.add(productName);

        panel.add(new JLabel("数量:"));
        JTextField quantity = new JTextField(5); // 输入数量的文本框
        panel.add(quantity);

        // 显示输入对话框
        int result = JOptionPane.showConfirmDialog(null, panel, "请选择需要删除的商品和数量", JOptionPane.OK_CANCEL_OPTION);
        // 当点击确定按钮时
        if (result == JOptionPane.OK_OPTION) {
            String name = productName.getText(); // 获取商品名称
            if (name.isEmpty()) {
                // 商品名称为空,弹出提示框
                JOptionPane.showMessageDialog(null, "请输入商品名称", "错误", JOptionPane.ERROR_MESSAGE);
                return; // 终止方法
            }
            int num;
            if (quantity.getText().matches("-?\\d+") && Integer.parseInt(quantity.getText()) >= 1) //若输入为整型数据
                num = Integer.parseInt(quantity.getText()); // 获取商品数量
            else {
                JOptionPane.showMessageDialog(null, "请输入正确的商品数量", "错误", JOptionPane.ERROR_MESSAGE);
                return;
            }

            Boolean b = cart.delete(name, num);
            if (!b) {
                JOptionPane.showMessageDialog(null, "商品不存在或数量不足", "提示", JOptionPane.INFORMATION_MESSAGE);
            } else {
                mall.addGoods(name,num);
                JOptionPane.showMessageDialog(null, "成功将 " + name + " * " + num + "从购物车中删除!", "提示", JOptionPane.INFORMATION_MESSAGE);
                showMallGoods(mallGoodsPanel);
                showCartGoods(cartGoodsPanel);
            }
        }
    }
    public void clearButton(){
        ArrayList<Commodity> com = cart.getItems();
        ArrayList<Integer> number = cart.getNumber();
        for (int i = 0; i < com.size(); i++) {
            mall.addGoods(com.get(i).getName(),number.get(i));
        }
        cart.clear();
        JOptionPane.showMessageDialog(null, "成功清空购物车!", "提示", JOptionPane.INFORMATION_MESSAGE);
        showMallGoods(mallGoodsPanel);
        showCartGoods(cartGoodsPanel);
    }
    public void checkOutButton(){
        JOptionPane.showMessageDialog(null, "结算成功,共需支付:"+cart.checkout()+" 元!", "提示", JOptionPane.INFORMATION_MESSAGE);
        cart.clear();
        showMallGoods(mallGoodsPanel);
        showCartGoods(cartGoodsPanel);
    }

运行截图

1.先添加一些物品到购物车

添加商品到购物车

2.购物车删除商品

购物车删除商品

3.清空购物车

清空购物车

4.结算购物车(重新添加500苹果和1个手机)

结算购物车
5.补充
在商城添加商品到购物车时商城商品数量会对应减少,在购物车删除或清空时对应的商品数量会回到商城中,结算购物车之后购物车商品会清空但不会回到商城。

总结

项目的图形界面主要是通过一个新增的GUI类实现的,对原本的购物车核心代码没有改动,核心代码可以用于控制台或者图形界面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值