JSpinner 的事件處理

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上去

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章