Какая кнопка JSpinner была нажата? - PullRequest
5 голосов
/ 03 марта 2011

Можно ли узнать изнутри ChangeListener, получающего ChangeEvent от JSpinner, какая кнопка (увеличение / уменьшение) была нажата?

Ответы [ 5 ]

5 голосов
/ 03 марта 2011

Краткий ответ: Нет, нет способа узнать, какая кнопка была нажата

Длинный ответ: в зависимости от вашей модели и прослушивателя изменений, если вы проводите сравнение между новым значением и предыдущим значением, можно узнать, прошел ли пользователь вперед или назад.

1 голос
/ 03 марта 2011

Вы можете осмотреть объект, запускающий событие.Возможно, сохраните значение до события и определите, повысилось оно или уменьшилось во время события.

0 голосов
/ 03 марта 2011

JSpinner является составным компонентом, к компонентам, которые он содержит, можно добавлять mouseListener. Вам придется немного поэкспериментировать, чтобы понять, как отличить кнопки друг от друга и от текстового поля. Один быстрый и грязный способ - проверить их координаты.

Я не уверен, хотите ли вы перебирать компоненты, содержащиеся в самом JSpinner, или компоненты, содержащиеся в контейнере, возвращаемом JSpinner.getEditor(), поэтому попробуйте оба.

0 голосов
/ 03 марта 2011

Вы можете сравнить новое значение со старым значением, сохранив старое значение:

int currentValue = spinner.getValue();
spinner.addChangeListener(new javax.swing.event.ChangeListener() {
    public void stateChanged(javax.swing.event.ChangeEvent e) {
        int value = spinner.getValue();
        if(value > currentValue) {
            // up was pressed
        } else if(value < currentValue) {
            // down was pressed
        }
        currentValue = value;
    }
});
0 голосов
/ 03 марта 2011

Сравните фактическое значение с предыдущим.Вот как:

ChangeEvent ce = ...
((JSpinner)ce.getSource()).getPreviousValue();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...