代码贴士
ItemListener:下拉列表框的事件监听器必须实现的分接口。
ItemStateChanged():当下拉列表框的选中项发生改变时将触发该方法。
ItemEvent:这是选项事件类,在用户更改带有多项选择内容的组件选项时(例如下拉选择框组件),将产生该事件。
(4)创建OkActionListener类,它必须实现ActionListener接口和接口中的actionPerformed()方法,在这个方法中获取新的库存商品价格,然后调用Dao类的updateKucunDj()方法更新库存价格。关键代码如下:
例程30 代码位置:光盘\TM\01\JXCManager\src\internalFrame\JiaGeTiaoZheng.java
class OkActionListener implements ActionListener {
public void actionPerformed(final ActionEvent e) {
kcInfo.setDj(Double.valueOf(danJia.getText()));
kcInfo.setKcsl(Integer.valueOf(kuCunShuLiang.getText()));
int rs = Dao.updateKucunDj(kcInfo);
if (rs > 0)
JOptionPane.showMessageDialog(getContentPane(), "价格调整完毕。",
kcInfo.getSpname() + "价格调整",
JOptionPane.QUESTION_MESSAGE);
}
}
1.10.4 单元测试
在价格调整界面中输入单价时,如果输入“1l33”程序将抛出NumberFormatException异常,如图1.31所示。这是因为输入单价的数字格式不对,注意输入值“1l33”的第二个“l”字符并不是数字,而是英文字母L的小写形式,字母当然不能用作数字,所以产生了这个错误,导致程序无法执行价格调整。
解决这一问题的方法是在执行价格调整之前,对输入的单价进行数字格式验证。可是,非要等操作员输入单价之后,再验证输入单价的正确与否吗?如果利用按键监听器,监听“单价”文本框中的每一次按键,当按键是数字时,继续接收输入;反之,当按键不是数字或小数点时(那它就应该是字母或其他的什么,反正不是数字),就取消本次按键的输入。这样在用户输入时,就能够有效地屏蔽非数字格式的输入,这比之前的数字格式验证更有效。关键代码如下:
例程31 代码位置:光盘\TM\01\JXCManager\src\internalFrame\JiaGeTiaoZheng.java
danJia.addKeyListener(new KeyAdapter() { //添加按键监听器
public void keyTyped(KeyEvent e) {
String numStr = "0123456789." + (char) 8; //数字格式的字符串,其中(char)8是回退键,用于删除字符
if (numStr.indexOf(e.getKeyChar()) < 0) //如果按键字符不在数字格式字符串中
e.consume(); //销毁按键对象
else //否则
updateJinE(); //更新库存金额
}
});