JSpinner的事件處理實現並不難,但不得不說使用並不太方便
基本使用方法如下:
SpinnerNumberModel model = new SpinnerNumberModel(value, minValue, maxValue, 1);
pageSpinner.setModel(model);
model.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JumpAction((Integer) pageSpinner.getValue());
}
});
只要添加個ChangeListener就行了,問題在於事件的觸發
我的代碼裏原來有
pageSpinner.setMaximum、setMinmum等方法,原來的思路是隻創建一次model,然後用set方法修改最大最小值,結果發現每次set的時候都會觸發stateChanged事件,而且頭痛的是ChangeEvent 只能獲得一個Source,根據這個不能判斷什麼時候應該觸發,並什麼時候不能觸發。
因爲我的觸發處理比較複雜,反覆觸發是不行的
後來的實現辦法是每次重新創建model,創建時model將最大、最小和當前值賦進去
這裏其實可以比較一下,到底是重新創建model的開銷大還是觸發的事件處理開銷大,根據業務不同,各人應該有各人的答案把
另外補充一下,針對JSinner添加ChangeListener事件和針對其model添加ChangeListener事件是一樣的,最終都是添加到model上去