package flowershop.view; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Font; import java.util.Date; import java.util.Map; import java.util.Set; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.TableModel; import flowershop.dao.OrderDao; import flowershop.dao.OrderDetailDao; import flowershop.model.Flower; import flowershop.model.Order; import flowershop.model.OrderDetail; import flowershop.model.User; import flowershop.dao.FlowerDao; import flowershop.daoimpl.FlowerDaoImpl; import flowershop.daoimpl.OrderDaoImpl; import flowershop.daoimpl.OrderDetailDaoImpl; //商品购物车窗口 public class CartFrame extends MyFrame { private JTable table; // 购物车数据 private Object[][] data; // 创建商品Dao private FlowerDao Dao = new FlowerDaoImpl(); // 购物车,键是选择的商品Id,值是商品的数量 private Map cart; // 引用到上级Frame(ProductListFrame) FlowerListFrame flowerListFrame; public CartFrame(Map cart, FlowerListFrame flowerListFrame) { super("商品购物车", 1000, 700); this.cart = cart; this.flowerListFrame = flowerListFrame; JPanel topPanel = new JPanel(); topPanel.setBackground(new Color(250,220,230)); FlowLayout fl_topPanel = (FlowLayout) topPanel.getLayout(); fl_topPanel.setVgap(10); fl_topPanel.setHgap(20); getContentPane().add(topPanel, BorderLayout.NORTH); JButton btnReturn = new JButton("返回商品列表"); btnReturn.setFont(new Font("微软雅黑", Font.PLAIN, 15)); topPanel.add(btnReturn); JButton btuSubmit = new JButton("提交订单"); // 注册【提交订单】按钮的ActionEvent事件监听器 btuSubmit.addActionListener(e -> { // 生成订单 generateOrders(); JLabel label = new JLabel("订单已经生成,等待付款。"); btuSubmit.setFont(new Font("微软雅黑", Font.PLAIN, 15)); if (JOptionPane.showConfirmDialog(this, label, "信息", JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) { // TODO 付款 System.out.println("未付款"); System.exit(0); } else { System.out.println("付款"); System.exit(1); } }); topPanel.add(btuSubmit); JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); scrollPane.setViewportView(getTable()); // 注册【返回商品列表】按钮的ActionEvent事件监听器 btnReturn.addActionListener(e -> { // 更新购物车 for (int i = 0; i < data.length; i++) { // 商品编号 String productid = (String) data[i][0]; // 数量 Integer quantity = (Integer) data[i][3]; cart.put(productid, quantity); } this.flowerListFrame.setVisible(true); this.setVisible(false); }); } // 初始化左侧面板中的表格控件 private JTable getTable() { // 准备表中数据 data = new Object[cart.size()][5]; Set keys = this.cart.keySet(); int indx = 0; for (String productid : keys) { Flower f = Dao.findById(productid); data[indx][0] = f.getProductid();// 商品编号 data[indx][1] = f.getName();// 商品名 data[indx][2] = new Double(f.getPrice());// 商品单价 data[indx][3] = new Integer(cart.get(productid));// 数量 // 计算商品应付金额 double amount = (double) data[indx][2] * (int) data[indx][3]; data[indx][4] = new Double(amount); indx++; } // 创建表数据模型 TableModel model = new CartTableModel(data); if (table == null) { // 创建表 table = new JTable(model); table.setBackground(new Color(250,220,230)); // 设置表中内容字体 table.setFont(new Font("微软雅黑", Font.PLAIN, 16)); // 设置表列标题字体 table.getTableHeader().setFont(new Font("微软雅黑", Font.BOLD, 16)); // 设置表行高 table.setRowHeight(51); table.setRowSelectionAllowed(false); } else { table.setModel(model); } return table; } // 生成订单 private void generateOrders() { // Example: Initialize the user before using it MainApp.user = new User(); String someUserId = null; MainApp.user.setUserid(someUserId); if (MainApp.user != null) { String userId = MainApp.user.getUserid(); // Continue processing with userId } else { // Handle the case where user is null System.out.println("未初始化用户"); } OrderDao orderDao = new OrderDaoImpl(); OrderDetailDao orderDetailDao = new OrderDetailDaoImpl(); Order order = new Order(); order.setUserid(MainApp.user.getUserid()); // 0待付款 order.setStatus(0); // 订单Id是当前时间 Date now = new Date(); long orderid = now.getTime(); order.setOrderid(orderid); order.setOrderdate(now); order.setAmount(getOrderTotalAmount()); // 下订单时间是数据库自动生成不用设置 // 创建订单 orderDao.create(order); for (int i = 0; i < data.length; i++) { OrderDetail orderDetail = new OrderDetail(); orderDetail.setOrderid(orderid); orderDetail.setProductid((String) data[i][0]); orderDetail.setQuantity((int) data[i][3]); orderDetail.setPrice((double) data[i][2]); // 创建订单详细 orderDetailDao.create(orderDetail); } } // 计算订单应付总金额 private double getOrderTotalAmount() { double totalAmount = 0.0; for (int i = 0; i < data.length; i++) { // 计算商品应付金额 totalAmount += (Double) data[i][4]; } return totalAmount; } }