内蒙古农业大学学士学位论文 27
量、品种数量、合计金额等商品信息的统计。在添加进货商品之后,要实现商品信息的自动统计,就要在table表格的PropertyChangeListener事件监听器中编写统计代码。这里将统计代码编写为ComputeInfo()方法,然后在事件监听器中调用。为表格添加监听的代码如下:
table.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent e) { });
当table表格发生属性改变事件时,事件监听器首先会检测发生的事件类型,也就是判断发生了哪种更改属性的事件,如果事件类型是tableCellEditor则说明属于表格编辑事件,这时应该针对表格的修改事件去调用ComputeInfo()方法执行商品进货的统计业务,并将结果显示在相应的组件上。ComputeInfo()方法的实现代码如下: /**
if ((e.getPropertyName().equals(\))) { }
ComputeInfo();
}
* @author lzwJava
* 事件处理器,该处理器用于计算货品总数、合计金额等信息。 */
private final void ComputeInfo() {
// 计算代码
int rows = table.getRowCount(); int count = 0; double money = 0.0; // 计算品种数量
TbSpinfo column = null;
Object valueAt = table.getValueAt(rows - 1, 0); if(!(valueAt instanceof TbSpinfo))
return;
column = (TbSpinfo) valueAt; rows--; if (rows > 0)
if (rows > 0 && (column == null || column.getId().isEmpty()))
28 聆风企业仓库管理系统
}
// 计算货品总数和金额
for (int i = 0; i < rows; i++) { }
pzslField.setText(rows + \); hpzsField.setText(count + \); hjjeField.setText(money + \);
String column7 = (String) table.getValueAt(i, 7); String column6 = (String) table.getValueAt(i, 6); int c7 = (column7 == null || column7.isEmpty()) ? 0 : float c6 = (column6 == null || column6.isEmpty()) ? 0 : count += c7; money += c6 * c7;
Integer.parseInt(column7); Float.parseFloat(column6);
在添加了进货但中的所有商品后,单击“入库”按钮可以将这些商品添加到数据库中。这需要在“入库”按钮的初始化方法中,为按钮添加ActionListener动作监听器,在监听器中实现商品入库的业务逻辑。getRuKuButton()方法会初始化“入库”按钮,同时该方法还通过if语句判断按钮是否已经初始化,如果已经初始化,就直接将对象返回给调用者,否则就先初始化按钮然后再返回。在初始化过程中,为按钮添加了事件监听,在该事件监听其中首先调用stopTableCellEditing()方法停止正在编辑的表格单元,然后获取进货单的品种数量、结算方式、合计金额、经手人、操作员、进货票号、验收结论等信息,并对关键信息进行判断,防止用户顽疾填写这些信息。最后,创建进货主表的模型对象、进货详细表的模型对象和库存表的模型对象,使用进货单窗体中的信息初始化这些模型对象,并把它们通过Dao公共类的insertRuKuInfo()方法保存到数据库对应的表中。实现的代码如下: /**
* 初始化(入库)按钮的方法 *
* @return javax.swing.JButton */
private JButton getRukuButton() {
if (rukuButton == null) {
rukuButton = new JButton();
内蒙古农业大学学士学位论文 29
{
rukuButton.setText(\入库\);
rukuButton.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(java.awt.event.ActionEvent e) { 收
集 进货 单 信息
stopTableCellEditing(); // 结束表格中没有编写的单元 String pzsStr = pzslField.getText(); // 品种数 String jeStr = hjjeField.getText(); // 合计金额
String jsfsStr = jsfsComboBox.getSelectedItem().toString(); // 结算方式 String jsrStr = jsrComboBox.getSelectedItem() + \; // 经手人 String czyStr = jsrComboBox.getSelectedItem() + \; // 操作员 String rkDate = jhsjField.getText(); // 入库时间 String ysjlStr = ysjlField.getText().trim(); // 验收结论 String id = idField.getText(); // 票号
String gysName = gysComboBox.getSelectedItem() +\;//供应商名字 if (jsrStr == null || jsrStr.isEmpty()) { JOptionPane.showMessageDialog(JinHuoDan_IFrame.this,
\请填写经手人\);
return;
}
if (ysjlStr == null || ysjlStr.isEmpty()) { JOptionPane.showMessageDialog(JinHuoDan_IFrame.this,
\填写验收结论\);
return;
}
if (table.getRowCount() <= 0) { JOptionPane.showMessageDialog(JinHuoDan_IFrame.this,
\填加入库商品\);
return; }
TbRukuMain ruMain = new TbRukuMain(id, pzsStr, jeStr,
ysjlStr, gysName, rkDate, czyStr, jsrStr, jsfsStr);
Set
int rows = table.getRowCount();
30 聆风企业仓库管理系统
创
for (int i = 0; i < rows; i++) { }
boolean rs = Dao.insertRukuInfo(ruMain); if (rs) { }}
JOptionPane.showMessageDialog(JinHuoDan_IFrame.this,
\入库完成\);
DefaultTableModel dftm = new DefaultTableModel(); table.setModel(dftm); pzslField.setText(\); hpzsField.setText(\); hjjeField.setText(\);
TbSpinfo spinfo = (TbSpinfo) table.getValueAt(i, 0); if (spinfo == null || spinfo.getId() == null
|| spinfo.getId().isEmpty()) continue;
建 并 }
初 始化 进 货详 细 表数 据 模 型
String djStr = (String) table.getValueAt(i, 6); String slStr = (String) table.getValueAt(i, 7); Double dj = Double.valueOf(djStr); Integer sl = Integer.valueOf(slStr); TbRukuDetail detail = new TbRukuDetail(); detail.setTabSpinfo(spinfo.getId()); detail.setTabRukuMain(ruMain.getRkId()); detail.setDj(dj); detail.setSl(sl); set.add(detail);
});
return rukuButton;}
至此,系统的功能全部实现。由于,代码量大,纸张有限,对于系统详细设计及功能实现就简要介绍到这里。对于系统存在的错误或功能不足,在今后的时间中会加以改进,升级。
5.4 系统运行效果图
内蒙古农业大学学士学位论文 31
图9 闪屏图片
图10 登陆窗口
图11 系统主窗口