Java: как заставить JSpinner показывать значение с некоторым смещением - PullRequest
4 голосов
/ 28 октября 2011

В моем приложении некоторые значения внутренне имеют свой диапазон от 0. Но пользователь должен видеть этот диапазон, начиная с 1. Я подумал, что было бы целесообразно перенести эти субсекты в презентацию. В данном случае это компонент 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;
        }

это входит в бесконечный цикл. Я предполагаю, что это вызывает событие изменения состояния по какой-то причине здесь. Вызывает getValue снова, увеличивает больше, вызывает событие, увеличивает и так далее. Как это можно решить? Спасибо

Ответы [ 2 ]

4 голосов
/ 28 октября 2011

Не смешивайте модель данных вашей программы и числовую модель счетчика;держать их отдельно.Делегат приватному SpinnerNumberModel, имеющему правильный диапазон представления, 1 .. n .Укажите метод доступа, который возвращает значения в нужном диапазоне: 0 .. n –1.

Укажите метод getAdjustedValue(), который в основном равен getValue()-offset, для всех клиентовследует использовать вместо getValue()?

Да.SpinnerModel служит представлением JSpinner.Если в модели вашего приложения используются разные единицы, должно произойти некоторое преобразование.Вы должны решить, где это имеет смысл.В качестве конкретного примера, эта модель ControlPanel имеет счетчик, который регулирует частоту в Гц , тогда как для Timer приложения требуется период вмиллисекунды.

2 голосов
/ 28 октября 2011

Я думаю, что CyclingSpinnerListModel может сделать это

...