代碼貼士
ItemListener:下拉列表框的事件監(jiān)聽器必須實現(xiàn)的分接口。
ItemStateChanged():當(dāng)下拉列表框的選中項發(fā)生改變時將觸發(fā)該方法。
ItemEvent:這是選項事件類,在用戶更改帶有多項選擇內(nèi)容的組件選項時(例如下拉選擇框組件),將產(chǎn)生該事件。
(4)創(chuàng)建OkActionListener類,它必須實現(xiàn)ActionListener接口和接口中的actionPerformed()方法,在這個方法中獲取新的庫存商品價格,然后調(diào)用Dao類的updateKucunDj()方法更新庫存價格。關(guān)鍵代碼如下:
例程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(), "價格調(diào)整完畢。",
kcInfo.getSpname() + "價格調(diào)整",
JOptionPane.QUESTION_MESSAGE);
}
}
1.10.4 單元測試
在價格調(diào)整界面中輸入單價時,如果輸入“1l33”程序?qū)伋鯪umberFormatException異常,如圖1.31所示。這是因為輸入單價的數(shù)字格式不對,注意輸入值“1l33”的第二個“l(fā)”字符并不是數(shù)字,而是英文字母L的小寫形式,字母當(dāng)然不能用作數(shù)字,所以產(chǎn)生了這個錯誤,導(dǎo)致程序無法執(zhí)行價格調(diào)整。
解決這一問題的方法是在執(zhí)行價格調(diào)整之前,對輸入的單價進(jìn)行數(shù)字格式驗證??墒?,非要等操作員輸入單價之后,再驗證輸入單價的正確與否嗎?如果利用按鍵監(jiān)聽器,監(jiān)聽“單價”文本框中的每一次按鍵,當(dāng)按鍵是數(shù)字時,繼續(xù)接收輸入;反之,當(dāng)按鍵不是數(shù)字或小數(shù)點時(那它就應(yīng)該是字母或其他的什么,反正不是數(shù)字),就取消本次按鍵的輸入。這樣在用戶輸入時,就能夠有效地屏蔽非數(shù)字格式的輸入,這比之前的數(shù)字格式驗證更有效。關(guān)鍵代碼如下:
例程31 代碼位置:光盤\TM\01\JXCManager\src\internalFrame\JiaGeTiaoZheng.java
danJia.addKeyListener(new KeyAdapter() { //添加按鍵監(jiān)聽器
public void keyTyped(KeyEvent e) {
String numStr = "0123456789." + (char) 8; //數(shù)字格式的字符串,其中(char)8是回退鍵,用于刪除字符
if (numStr.indexOf(e.getKeyChar()) < 0) //如果按鍵字符不在數(shù)字格式字符串中
e.consume(); //銷毀按鍵對象
else //否則
updateJinE(); //更新庫存金額
}
});