diff --git a/FlowerListFrame.java b/FlowerListFrame.java new file mode 100644 index 0000000..6d7fa3e --- /dev/null +++ b/FlowerListFrame.java @@ -0,0 +1,242 @@ +package flowershop.view; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.GridLayout; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSeparator; +import javax.swing.JSplitPane; +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import javax.swing.SwingConstants; +import javax.swing.table.TableColumnModel; +import javax.swing.table.TableModel; + +import flowershop.model.Flower; +import flowershop.dao.FlowerDao; +import flowershop.daoimpl.FlowerDaoImpl; + +//商品列表窗口 +public class FlowerListFrame extends MyFrame{ + + + private JTable table; + private JLabel lblImage; + private JLabel lblPrice; + private JLabel lblDescn; + + //商品列表集合 + private List flowers =null; + //创建商品Dao对象 + private FlowerDao dao = new FlowerDaoImpl(); + + // 购物车,键是选择的商品Id,值是商品的数量 + private Map cart = new HashMap(); + // 选择的商品索引 + private int selectedRow = -1; + public FlowerListFrame(String title, int width, int height) { + super(title, width, height); + // TODO 自动生成的构造函数存根 + flowers = dao.findAll(); + //添加顶部搜索面板 + getContentPane().add(getSearchPanel(),BorderLayout.NORTH); + //创建分栏面板 + JSplitPane splitPane = new JSplitPane(); + //设置指定分割条位置,从窗格的左边到分割条的右边 + splitPane.setDividerLocation(600); + //设置左侧面板 + splitPane.setLeftComponent(getLeftPanel()); + //设置右侧面板 + splitPane.setRightComponent(getRightPanel()); + //把分栏面板添加到内容面板 + getContentPane().add(splitPane,BorderLayout.CENTER); + } + //初始化右侧面板 + private JPanel getRightPanel() { + JPanel rightPanel = new JPanel(); + rightPanel.setBackground(new Color(255, 220, 230)); + + rightPanel.setLayout(new GridLayout(2,1,0,20)); + + lblImage = new JLabel(); + rightPanel.add(lblImage); + lblImage.setHorizontalAlignment(SwingConstants.CENTER); + + JPanel detailPanel = new JPanel(); + detailPanel.setBackground(new Color(255, 220, 230)); + rightPanel.add(detailPanel); + detailPanel.setLayout(new GridLayout(8,1,0,5)); + + JSeparator separator_1 = new JSeparator(); + detailPanel.add(separator_1); + + lblPrice = new JLabel(); + detailPanel.add(lblPrice); + //设置字体 + lblPrice.setFont(new Font("微软雅黑",Font.PLAIN,16)); + + + lblDescn = new JLabel(); + detailPanel.add(lblDescn); + //设置字体 + lblDescn.setFont(new Font("微软雅黑",Font.PLAIN,16)); + + JSeparator separator_2 = new JSeparator(); + detailPanel.add(separator_2); + + JButton btnAdd = new JButton("添加到购物车"); + btnAdd.setFont(new Font("微软雅黑",Font.PLAIN,15)); + detailPanel.add(btnAdd); + + //布局占位使用 + JLabel lb1 =new JLabel(""); + detailPanel.add(lb1); + + JButton btnCheck = new JButton("查看购物车"); + btnCheck.setFont(new Font("微软雅黑",Font.PLAIN,15)); + detailPanel.add(btnCheck); + + //注册【添加到购物车】按钮的ActionEvent事件监听器 + btnAdd.addActionListener(e ->{ + + if(selectedRow <0) { + return; + } + //添加商品到购物车处理 + Flower selectFlower = flowers.get(selectedRow); + String productid = selectFlower.getProductid(); + + if(cart.containsKey(productid)) {//购物车中已经有该商品 + //获得商品数量 + Integer quantity = cart.get(productid); + cart.put(productid, ++quantity); + }else {//购物车中还没有还商品 + cart.put(productid, 1); + } + System.out.println(cart); + }); + // //注册【查看到购物车】按钮的ActionEvent事件监听器 + btnCheck.addActionListener(e->{ + CartFrame cartFrame = new CartFrame(cart,this); + cartFrame.setVisible(true); + this.setVisible(false); + }); + + + return rightPanel; + } + //初始化左侧面板 + private JScrollPane getLeftPanel() { + + JScrollPane leftScrollPane = new JScrollPane(); + //将表格作为滚动面板的各个视口试图 + leftScrollPane.setViewportView(getTable()); + return leftScrollPane; + } + //初始化左侧面板中的表格控件 + private JTable getTable() { + FlowerTableModel model = new FlowerTableModel(this.flowers); + + if(table == null) { + table = new JTable(model); + //设置表中内容字体 + table.setFont(new Font("微软雅黑",Font.PLAIN,16)); + //设置表列标题字体 + table.getTableHeader().setFont(new Font("微软雅黑",Font.PLAIN,16)); + //设置表行高 + table.setRowHeight(51); + table.setRowSelectionAllowed(true); + table.setBackground(new Color(250,220,230)); + table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + ListSelectionModel rowSelectionModel = table.getSelectionModel(); + + + + rowSelectionModel.addListSelectionListener(e ->{ + + //只处理鼠标释放 + if(e.getValueIsAdjusting()) { + return; + } + ListSelectionModel lsm = (ListSelectionModel) e.getSource(); + selectedRow = lsm.getMinSelectionIndex(); + if(selectedRow < 0) { + return; + } + //更新右侧面板内容 + Flower f = flowers.get(selectedRow); + String petImage = String.format("/image/%s",f.getImage()); + ImageIcon icon = new ImageIcon(FlowerListFrame.class.getResource(petImage)); + lblImage.setIcon(icon); + + String descn = f.getDescn(); + lblDescn.setText("花语: "+ descn); + + double price = f.getPrice(); + String sprice = String.format("单支价格:%.2f",price); + lblPrice.setText(sprice); + + }); + }else { + table.setModel(model); + } + return table; + } + //初始化搜索面板 + private JPanel getSearchPanel() { + //TODO + JPanel searchPanel = new JPanel(); + searchPanel.setBackground(new Color(255, 220, 230)); + FlowLayout flowLayout = (FlowLayout) searchPanel.getLayout(); + flowLayout.setVgap(20); + flowLayout.setHgap(40); + + JLabel lbl = new JLabel("请选择花卉类别:"); + lbl.setFont(new Font("微软雅黑",Font.PLAIN,15)); + searchPanel.add(lbl); + + String[] categorys= {"春季花卉","夏季花卉","秋季花卉","冬季花卉"}; + JComboBox comboBox = new JComboBox(categorys); + comboBox.setFont(new Font("微软雅黑",Font.PLAIN,15)); + searchPanel.add(comboBox); + + JButton btnGo = new JButton("查询"); + btnGo.setFont(new Font("微软雅黑", Font.PLAIN, 15)); + searchPanel.add(btnGo); + + JButton btnReset = new JButton("重置"); + btnReset.setFont(new Font("微软雅黑",Font.PLAIN,15)); + searchPanel.add(btnReset); + + + //注册查询按钮的ActionEvent事件监听器 + btnGo.addActionListener(e ->{ + //所选择的类别 + String category = (String) comboBox.getSelectedItem(); + //按照类别查询 + flowers = dao.findByCategory(category); + TableModel model = new FlowerTableModel(flowers); + table.setModel(model); + }); + // 注册重置按钮的ActionEvent事件监听器 + btnReset.addActionListener(e -> { + flowers = dao.findAll(); + TableModel model = new FlowerTableModel(flowers); + table.setModel(model); + }); + return searchPanel; + } + +}