package com.lingnan.supermarket.dialog; // 声明当前类所在的包 import java.awt.Container; // 导入AWT容器类 import java.awt.FlowLayout; // 导入流式布局类 import java.awt.event.ActionEvent; // 导入动作事件类 import java.awt.event.ActionListener; // 导入动作监听器接口 import java.awt.event.ItemEvent; // 导入项目事件类 import java.awt.event.ItemListener; // 导入项目监听器接口 import java.util.ArrayList; // 导入ArrayList类 import javax.swing.JButton; // 导入Swing的按钮组件 import javax.swing.JComboBox; // 导入Swing的下拉框组件 import javax.swing.JDialog; // 导入Swing的对话框组件 import javax.swing.JFrame; // 导入Swing的窗口框架组件 import javax.swing.JLabel; // 导入Swing的标签组件 import javax.swing.JOptionPane; // 导入Swing的对话框工具类 import javax.swing.JPanel; // 导入Swing的面板组件 import javax.swing.JTextField; // 导入Swing的文本框组件 import com.lingnan.supermarket.*; // 导入supermarket包下的所有类 import com.lingnan.supermarket.dao.SupplierInfService; // 导入供应商信息服务接口 import com.lingnan.supermarket.dao.productionService; // 导入产品服务接口 import com.lingnan.supermarket.dao.impl.SupplierInfImpl; // 导入供应商信息服务的实现类 import com.lingnan.supermarket.dao.impl.prodCatalogImpl; // 导入产品目录服务的实现类 import com.lingnan.supermarket.dao.impl.productionImpl; // 导入产品服务的实现类 import com.lingnan.supermarket.dto.ProdCatalog; // 导入产品目录数据传输对象 import com.lingnan.supermarket.dto.Production; // 导入产品数据传输对象 import com.lingnan.supermarket.dto.SupplierInf; // 导入供应商信息数据传输对象 import com.lingnan.supermarket.table.ProdCatalogTM; // 导入产品目录表格模型 import com.lingnan.supermarket.view.StorageView; // 导入库存视图 import com.lingnan.supermarket.view.SupplierView; // 导入供应商视图 import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; // 导入产品目录视图的内部类MyItemListener public class ProductionDialog extends JDialog implements ActionListener { // 定义一个对话框类ProductionDialog,继承自JDialog并实现ActionListener接口 private JPanel namePanel, addressPanel, contactPanel, // 声明多个面板变量 opePanel,idPanel,inpricePanel,outpricePanel,lifePanel, // 用于不同信息的布局 sumPanel,supplyidPanel,id2Panel,name2Panel; // private JLabel nameLabel, addressLabel, contactLabel, // 声明多个标签变量 idLabel,inpriceLabel,outpriceLabel,lifeLabel,sumLabel, // 用于显示不同信息的标签 supplyidLabel,id2Label,name2Label; // private JTextField nameTF, addressTF, contactTF, // 声明多个文本框变量 idTF,inpriceTF,outpriceTF,lifeTF,sumTF, // 用于输入不同信息 supplyidTF,id2TF,name2TF; // private JButton saveBtn, cancelBtn; // 声明保存和取消按钮变量 private productionService productionService = new productionImpl(); // 实例化产品服务 // 下拉类别相关变量 private String log[]=null; // 用于存储类别信息的数组 private ArrayListalog=null; // 用于存储类别信息的列表 private ProdCatalogTM prodCatalogTM; // 产品目录表格模型 private ProdCatalog pc; // 产品目录数据传输对象 private prodCatalogImpl pci; // 产品目录服务实现类 private JComboBox combo; // 下拉框组件 private String id2; // 产品目录ID private String name2; // 产品目录名称 // 下拉供应商类别相关变量 private String superlier[]=null; // 用于存储供应商信息的数组 private ArrayListasuperlier=null; // 用于存储供应商信息的列表 private SupplierInf si; // 供应商信息数据传输对象 private SupplierInfImpl sii; // 供应商信息服务实现类 private JComboBox combo1; // 供应商下拉框组件 private int supplyid; // 供应商ID private StorageView storageView; // 库存视图引用 private Production production; // 产品数据传输对象 public ProductionDialog(JFrame parent) { // 构造函数,接收一个父窗口作为参数 super(parent, "添加"); // 调用父类构造函数,设置对话框标题为"添加" setSize(350, 500); // 设置对话框大小 setLocationRelativeTo(null); // 设置对话框相对于屏幕居中 setModal(true); // 设置对话框为模态 setResizable(false); // 设置对话框不可调整大小 this.setLayout(new FlowLayout()); // 设置对话框布局为流式布局 initView(); // 初始化视图 } private void initView() { // 初始化视图的方法 idPanel = new JPanel(); // 创建一个面板用于显示商品编号 idLabel = new JLabel("商品编号"); // 创建一个标签显示"商品编号" idTF = new JTextField(15); // 创建一个文本框用于输入商品编号,宽度为15 idPanel.add(idLabel); // 将标签添加到面板 idPanel.add(idTF); // 将文本框添加到面板 namePanel = new JPanel(); // 创建一个面板用于显示名称 nameLabel = new JLabel("名称"); // 创建一个标签显示"名称" nameTF = new JTextField(15); // 创建一个文本框用于输入名称,宽度为15 namePanel.add(nameLabel); // 将标签添加到面板 namePanel.add(nameTF); // 将文本框添加到面板 inpricePanel = new JPanel(); // 创建一个面板用于显示进货单价 inpriceLabel = new JLabel("进货单价"); // 创建一个标签显示"进货单价" inpriceTF = new JTextField(15); // 创建一个文本框用于输入进货单价,宽度为15 inpricePanel.add(inpriceLabel); // 将标签添加到面板 inpricePanel.add(inpriceTF); // 将文本框添加到面板 outpricePanel = new JPanel(); // 创建一个面板用于显示购买单价 outpriceLabel = new JLabel("购买单价"); // 创建一个标签显示"购买单价" outpriceTF = new JTextField(15); // 创建一个文本框用于输入购买单价,宽度为15 outpricePanel.add(outpriceLabel); // 将标签添加到面板 outpricePanel.add(outpriceTF); // 将文本框添加到面板 lifePanel = new JPanel(); // 创建一个面板用于显示保质期 lifeLabel = new JLabel("保质期(月份数)"); // 创建一个标签显示"保质期(月份数)" lifeTF = new JTextField(15); // 创建一个文本框用于输入保质期,宽度为15 lifePanel.add(lifeLabel); // 将标签添加到面板 lifePanel.add(lifeTF); // 将文本框添加到面板 sumPanel = new JPanel(); // 创建一个面板用于显示库存 sumLabel = new JLabel("库存"); // 创建一个标签显示"库存" sumTF = new JTextField(15); // 创建一个文本框用于输入库存数量,宽度为15 sumPanel.add(sumLabel); // 将标签添加到面板 sumPanel.add(sumTF); // 将文本框添加到面板 //供应商名下拉框 传递supplyid supplyidPanel = new JPanel(); // 创建一个面板用于显示供应商信息 supplyidLabel = new JLabel("供应商"); // 创建一个标签显示"供应商" //supplyidTF = new JTextField(15); // 注释掉的代码,原本可能是用于输入供应商ID的文本框 sii=new SupplierInfImpl(); // 创建供应商信息服务的实例 this.asuperlier=sii.findNameSupplier(); // 获取所有供应商名称的列表 this.superlier=new String[asuperlier.size()]; // 创建一个字符串数组用于存储供应商名称 for(int i=0;i(superlier); // 创建一个下拉框组件,用于选择供应商 combo1.addItemListener(new MyItemListener1()); // 为下拉框添加项目监听器 supplyidPanel.add(supplyidLabel); // 将标签添加到面板 supplyidPanel.add(combo1); // 将下拉框添加到面板 /* id2Panel = new JPanel(); id2Label = new JLabel("分类id"); id2TF = new JTextField(id2,15); id2Panel.add(id2Label); id2Panel.add(id2TF);*/ //类名下拉框 name2Panel = new JPanel(); // 创建一个面板用于显示类名 name2Label = new JLabel("类名"); // 创建一个标签显示"类名" pci=new prodCatalogImpl(); // 创建产品目录服务的实例 this.alog=pci.findNameProdCatalog(); // 获取所有产品目录名称的列表 this.log=new String[alog.size()]; // 创建一个字符串数组用于存储产品目录名称 for(int i=0;i(log); // 创建一个下拉框组件,用于选择产品目录 combo.addItemListener(new MyItemListener()); // 为下拉框添加项目监听器 name2Panel.add(name2Label); // 将标签添加到面板 name2Panel.add(combo); // 将下拉框添加到面板 addressPanel = new JPanel(); // 创建一个面板用于显示地址 addressLabel = new JLabel("地址"); // 创建一个标签显示"地址" addressTF = new JTextField(15); // 创建一个文本框用于输入地址,宽度为15 addressPanel.add(addressLabel); // 将标签添加到面板 addressPanel.add(addressTF); // 将文本框添加到面板 contactPanel = new JPanel(); // 创建一个面板用于显示联系方式 contactLabel = new JLabel("电话"); // 创建一个标签显示"电话" contactTF = new JTextField(15); // 创建一个文本框用于输入电话,宽度为15 contactPanel.add(contactLabel); // 将标签添加到面板 contactPanel.add(contactTF); // 将文本框添加到面板 opePanel = new JPanel(); // 创建一个面板用于显示操作按钮 saveBtn = new JButton("保存"); // 创建一个保存按钮 cancelBtn = new JButton("取消"); // 创建一个取消按钮 saveBtn.addActionListener(this); // 为保存按钮添加动作监听器 cancelBtn.addActionListener(this); // 为取消按钮添加动作监听器 opePanel.add(saveBtn); // 将保存按钮添加到面板 opePanel.add(cancelBtn); // 将取消按钮添加到面板 Container container = getContentPane(); // 获取对话框的内容面板 container.add(idPanel); // 将商品编号面板添加到内容面板 container.add(namePanel); // 将名称面板添加到内容面板 container.add(inpricePanel); // 将进货单价面板添加到内容面板 container.add(outpricePanel); // 将购买单价面板添加到内容面板 container.add(lifePanel); // 将保质期面板添加到内容面板 container.add(sumPanel); // 将库存面板添加到内容面板 container.add(supplyidPanel); // 将供应商面板添加到内容面板 //container.add(id2Panel); // 注释掉的代码,原本可能是用于添加分类ID面板 container.add(name2Panel); // 将类名面板添加到内容面板 container.add(opePanel); // 将操作按钮面板添加到内容面板 } @Override public void actionPerformed(ActionEvent e) { // 实现ActionListener接口的actionPerformed方法 Object source = e.getSource(); // 获取事件源 if (source == saveBtn) { // 如果事件源是保存按钮 // 思路获取数据 // 保存到数据库 // 关闭对话框 // 刷新table String name = nameTF.getText(); // 获取名称文本框的内容 String id = idTF.getText(); // 获取商品编号文本框的内容 float inprice = Float.parseFloat((inpriceTF.getText())); // 将进货单价文本框的内容转换为浮点数 float outprice = Float.parseFloat(outpriceTF.getText()); // 将销售单价文本框的内容转换为浮点数 int life = Integer.parseInt(lifeTF.getText()); // 将保质期文本框的内容转换为整数 int sum = Integer.parseInt(sumTF.getText()); // 将库存文本框的内容转换为整数 // TODO 参数校验 if (this.production == null) { // 如果production对象为空,表示是添加新商品 if(supplyid==-1){ // 如果供应商ID为-1,表示商品检索出错 JOptionPane.showMessageDialog(this, "商品检索出错", "提示", JOptionPane.ERROR_MESSAGE); // 显示错误消息 return; // 退出方法 } if(supplyid==0){ // 如果供应商ID为0,表示未选择商品名 JOptionPane.showMessageDialog(this, "请选择商品名", "提示", JOptionPane.ERROR_MESSAGE); // 显示错误消息 return; // 退出方法 } if(id2.equals("0")){ // 如果分类ID为"0",表示未选择商品类 JOptionPane.showMessageDialog(this, "请选择商品类", "提示", JOptionPane.ERROR_MESSAGE); // 显示错误消息 return; // 退出方法 } Production production = new Production(); // 创建新的Production对象 production.setId(id); // 设置商品编号 production.setName(name); // 设置商品名称 production.setInPrice(inprice); // 设置进货单价 production.setOutPrice(outprice); // 设置销售单价 production.setLife(life); // 设置保质期 production.setSum(sum); // 设置库存 production.setSupplyId(supplyid); // 设置供应商ID production.setId2(id2); // 设置分类ID production.setName2(name2); // 设置分类名称 int result = productionService.addProduction(production); // 调用服务添加商品 // int result = 1; // 注释掉的代码,可能是用于测试 if (result == 1) { // 如果添加成功 JOptionPane.showMessageDialog(this, "添加成功", "提示", JOptionPane.INFORMATION_MESSAGE); // 显示成功消息 this.dispose(); // 关闭对话框 } else if(result == 2){ // 如果返回值为2,表示已存在该商品 JOptionPane.showMessageDialog(this, "已存在该商品", "提示", JOptionPane.ERROR_MESSAGE); // 显示错误消息 } else { // 如果添加失败 JOptionPane.showMessageDialog(this, "出错!添加失败", "提示", JOptionPane.ERROR_MESSAGE); // 显示错误消息 } }/*else{ //更新 SupplierInf supplierInf= new SupplierInf(); supplierInf.setName(name); supplierInf.setAddress(address); supplierInf.setContact(contact); supplierInf.setId(this.supplierInf.getId()); int result = supplierInfService.updateSupplierInf(supplierInf); if(result==1){ JOptionPane.showMessageDialog(this, "更新成功", "提示", JOptionPane.INFORMATION_MESSAGE); } }*/ } else if (source == cancelBtn) { // 如果事件源是取消按钮 this.dispose(); // 关闭对话框 } } // 定义一个内部类MyItemListener实现ItemListener接口 public class MyItemListener implements ItemListener { @Override public void itemStateChanged(ItemEvent e) { // 实现itemStateChanged方法 JComboBox cb = (JComboBox) e.getSource(); // 获取事件源,即下拉框组件 name2 = (String) cb.getSelectedItem(); // 获取选中的商品类名称 pci =new prodCatalogImpl(); // 创建商品分类服务实现类对象 for(int i=0;i