Java: як зробити JSpinner показувати значення з деяким зміщенням

У моєму додатку деякі значення внутрішньо мають свій діапазон від 0. Але користувач повинен бачити цей діапазон, починаючи з 1. Я думав, що було б доцільно перенести цей матеріал у презентацію. У цьому випадку це компонент JSpinner. Так що я можу вказати в contructor, якщо є зміщення (не всі значення мають його). Але якщо я замінюю 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;
        }

вона переходить у нескінченний цикл. Я припускаю, що це звільняє подію зміни держави з якоїсь причини тут. Виклики getValue знову збільшуються, збільшують кількість подій, збільшують кількість подій і так далі. Як це можна вирішити? Дякую

4

2 Відповіді

Не змішуйте модель даних програми та модель числа лічильників; тримати їх окремо. Делегуйте приватному SpinnerNumberModel правильний діапазон подання, 1 .. n . Надайте доступ, який повертає значення в потрібному діапазоні, 0 .. n –1.

Надайте метод getAdjustedValue() , який в основному getValue() - зміщення , який всі клієнти повинні використовувати замість getValue() ?

Так. SpinnerModel надає перегляд JSpinner . Якщо модель вашої програми використовує різні блоки, має відбутися деяка трансформація. Ви повинні вирішити, де це має сенс. Як конкретний приклад - це модель сайту ControlPanel має лічильник, який налаштовує частоту в Гц , в той час як Таймер програми вимагає періоду в мілісекундах.

4
додано
Я розробив вище.
додано Автор trashgod, джерело
Отже, якщо є зміщення, JSpinner передає value + offset на SpinnerNumberModel зміщення , яке повинні використовувати всі клієнти замість getValue ? Я зрозумів, ви правильно?
додано Автор Boris Mikhaylov, джерело
спасибі, що мене на правильному шляху
додано Автор Boris Mikhaylov, джерело

Я думаю, що CyclingSpinnerListModel можна зробити це

2
додано
@Boris Mikhaylov, що про вона переходить у нескінченний цикл. , то ви можете відмовитися від цього в деякий діапазон
додано Автор mKorbel, джерело
+1 Це хороший приклад приватного SpinnerModel , як запропоновано тут .
додано Автор trashgod, джерело
Не могли б Ви розробити це? Я не бачу, як це допомагає
додано Автор Boris Mikhaylov, джерело
але весь сенс полягає в тому, щоб збільшити значення лише один раз
додано Автор Boris Mikhaylov, джерело
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників