Java: як зрабіць, каб паказаць значэнне JSpinner з некаторым зрушэннем

У маім дадатку некаторыя каштоўнасці ўнутрана маюць свой дыяпазон ад 0. Але карыстальнік павінен убачыць гэты дыяпазон, пачынаючы з 1. Я думаў, што было б мэтазгодна, каб перамясціць гэты offseting матэрыял у прэзентацыю. У гэтым выпадку JSpinner кампаненты. Так што я мог бы паказаць у забудоўшчык, калі ёсць зрушэнне (не ўсе значэнні маюць). Але калі я перавызначаць GetValue() з JSpinner або GetValue() мадэлі, каб быць нешта падобнае (+1 толькі для тэставання)

       public Object getValue() {
            Number value = (Number)super.getValue();
            Number newValue=value;
            if (value instanceof Double){
                newValue=value.doubleValue()+1;
            }
            else if (value instanceof Integer){
                newValue = value.intValue()+1;
            }
            return newValue;
        }

ён пераходзіць у бясконцы цыкл. Я думаю, гэта пажары падзея змены стану па нейкай прычыне тут. Выклікі ПолучитьЗначение зноў, прыросты больш, спрацоўвае падзея, прырашчэнне і гэтак далей. Як гэта можа быць вырашана? дзякуй

4

2 адказы

Не змешваць мадэль дадзеных вашай праграмы і нумар мадэлі Прядильщиков; трымаць іх асобна. Дэлегаванне прыватнаму SpinnerNumberModel , які мае правільны дыяпазон прадстаўлення, 1 .. <�ет> п . Забяспечыць аксессор, які вяртае значэння ў патрабаваным дыяпазоне, 0 .. <�ет> п -1.

<�Р> Забяспечваюць метад getAdjustedValue() , які ў асноўным GetValue() - зрушэнне , што ўсе кліенты павінны выкарыстоўваць замест GetValue()

Так. <�Код> SpinnerModel служыць JSpinner выгляд. Калі мадэль вашага прыкладання выкарыстоўвае розныя адзінкі, некаторы пераўтварэнне павінна адбыцца. Вы павінны вырашыць, дзе гэта мае найбольшы сэнс. У якасці канкрэтнага прыкладу, гэта мадэлі 's ControlPanel мае лічыльнік, які рэгулюе частату ў Гц , у той час як прыкладання Таймер патрабуе перыяду ў мілісекундах.

4
дададзена
Я падрабязна вышэй.
дададзена аўтар trashgod, крыніца
Такім чынам, калі ёсць зрушэнне, JSpinner пераходзіць значэнне + зрушэнне у становішча SpinnerNumberModel і дае метад getAdjustedValue які з'яўляецца ў асноўным GetValue() - зрушэнне , які ўсё кліенты павінны выкарыстоўваць замест ПолучитьЗначение ? А я разумею, што вы правільна?
дададзена аўтар Boris Mikhaylov, крыніца
дзякуй, што ў мяне на правільным шляху
дададзена аўтар Boris Mikhaylov, крыніца

Я думаю, што CyclingSpinnerListModel можа зрабіць

2
дададзена
@Boris Mikhaylov што пра ён пераходзіць у бясконцы цыкл. , то вы можаце restict, што ў нейкай дыяпазон
дададзена аўтар mKorbel, крыніца
+1 Гэта добры прыклад прыватнай SpinnerModel , як гэта было прапанавана .
дададзена аўтар trashgod, крыніца
Не маглі б вы ўдакладніць, што? Я не бачу, як гэта дапамагае
дададзена аўтар Boris Mikhaylov, крыніца
але ўся справа ў тым, каб павялічыць значэнне толькі адзін раз
дададзена аўтар Boris Mikhaylov, крыніца