进销存管理系统(17)

(2)编写initTable()方法,该方法用于初始化商品表格的表头、列编辑器等。设置表格中第一列的编辑器使用下拉列表框样式的编辑器,通过该编辑器选择商品的名称,其他的商品信息将自动填充。关键代码如下:

例程22 代码位置:光盘\TM\01\JXCManager\src\internalFrame\JinHuoDan.java

private void initTable() { //初始化表格

String[] columnNames = {"商品名称", "商品编号", "产地", "单位", "规格", "包装", "单价",

"数量", "批号", "批准文号"};

((DefaultTableModel) table.getModel())

.setColumnIdentifiers(columnNames); //设置表格的表头

TableColumn column = table.getColumnModel().getColumn(0); //获取表格第一列

final DefaultCellEditor editor = new DefaultCellEditor(sp); //创建表格列编辑器

editor.setClickCountToStart(2);

column.setCellEditor(editor);

}

(3)编写initSpBox()方法,该方法用于初始化表格中的商品下拉列表框。它首先调用Dao类的query()方法获取指定供应商所提供的所有商品信息,然后将这些商品信息封装成商品对象,并把这些对象添加到商品下拉列表框中。关键代码如下:

例程23 代码位置:光盘\TM\01\JXCManager\src\internalFrame\JinHuoDan.java

private void initSpBox() { //初始化商品下拉列表框

List list = new ArrayList();

ResultSet set = Dao.query("select * from tb_spinfo where gysName='"

+ gys.getSelectedItem() + "'"); //调用query()方法

sp.removeAllItems();

sp.addItem(new TbSpinfo());

for (int i = 0; table != null && i < table.getRowCount(); i++) {

TbSpinfo tmpInfo = (TbSpinfo) table.getValueAt(i, 0);

if (tmpInfo != null && tmpInfo.getId() != null)

list.add(tmpInfo.getId());

}

try {

while (set.next()) {

TbSpinfo spinfo = new TbSpinfo(); //创建商品对象

spinfo.setId(set.getString("id").trim()); //初始化商品对象

//如果表格中已存在同样商品,商品下拉列表框中就不再包含该商品

if (list.contains(spinfo.getId()))

continue;

spinfo.setSpname(set.getString("spname").trim()); //封装商品信息

spinfo.setCd(set.getString("cd").trim());

spinfo.setJc(set.getString("jc").trim());

spinfo.setDw(set.getString("dw").trim());

spinfo.setGg(set.getString("gg").trim());

spinfo.setBz(set.getString("bz").trim());

spinfo.setPh(set.getString("ph").trim());

spinfo.setPzwh(set.getString("pzwh").trim());

spinfo.setMemo(set.getString("memo").trim());

spinfo.setGysname(set.getString("gysname").trim());

sp.addItem(spinfo); //将商品对象添加到下拉列表框

}

} catch (SQLException e) {

e.printStackTrace();

}

}

代码贴士

setSpname ():该方法用于设置商品实体类的商品名称。

setCd ():该方法用于设置商品实体类的商品产地。

setJc ():该方法用于设置商品实体类的商品简称。

setDw ():该方法用于设置商品实体类的商品单位。

setGg ():该方法用于设置商品实体类的商品规格。

setBz ():该方法用于设置商品实体类的商品包装。

setPh ():该方法用于设置商品实体类的商品批号。

setPzwh ():该方法用于设置商品实体类的商品批准文号。

setMemo ():该方法用于设置商品实体类的商品简介信息。

setGysname ():该方法用于设置商品实体类的供应商名称。

(4)编写“入库”按钮的事件监听器RkActionListener类,该类必须实现ActionListener接口和接口中的actionPerformed()方法,并在actionPerformed()方法中获取界面中的商品表格数据,然后将这些数据封装到进货数据表的实体对象中,最后调用Dao类的insertRukuInfo()方法在事务中保存进货单数据。关键代码如下:

例程24 代码位置:光盘\TM\01\JXCManager\src\internalFrame\JinHuoDan.java

class RkActionListener implements ActionListener { //“入库”按钮的事件监听器

public void actionPerformed(ActionEvent e) {

stopTableCellEditing(); //结束表格中没有编写的单元

clearEmptyRow(); //清除空行

String hpzsStr = hpzs.getText(); //货品总数

String pzsStr = pzs.getText(); //品种数

String jeStr = hjje.getText(); //合计金额

String jsfsStr = jsfs.getSelectedItem().toString(); //结算方式

String jsrStr = jsr.getText().trim(); //经手人

String czyStr = czy.getText(); //操作人员

String rkDate = jhsjDate.toLocaleString(); //入库时间

String ysjlStr = ysjl.getText().trim(); //验收结论

String id = piaoHao.getText(); //票号

String gysName = gys.getSelectedItem().toString(); //供应商名称

if (jsrStr == null || jsrStr.isEmpty()) {

JOptionPane.showMessageDialog(JinHuoDan.this, "请填写经手人");

return;

}

if (ysjlStr == null || ysjlStr.isEmpty()) {

JOptionPane.showMessageDialog(JinHuoDan.this, "添写验收结论");

return;

}

if (table.getRowCount() <= 0) {

JOptionPane.showMessageDialog(JinHuoDan.this, "添加入库商品");

return;

}

TbRukuMain ruMain = new TbRukuMain(id, pzsStr, jeStr, ysjlStr,

gysName, rkDate, czyStr, jsrStr, jsfsStr); //创建入库主表实体对象

Set<TbRukuDetail> set = ruMain.getTabRukuDetails(); //获取入库主表的详细表集合

int rows = table.getRowCount();

for (int i = 0; i < rows; i++) {

TbSpinfo spinfo = (TbSpinfo) table.getValueAt(i, 0); //获取商品对象

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);

}

boolean rs = Dao.insertRukuInfo(ruMain); //调用insertRukuInfo()方法保存进货单

if (rs) {

JOptionPane.showMessageDialog(JinHuoDan.this, "入库完成");

DefaultTableModel dftm = new DefaultTableModel();

table.setModel(dftm);

initTable();

pzs.setText("0");

hpzs.setText("0");

hjje.setText("0");

}

}

}

读书导航