(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");
}
}
}