Подтвердить что ты не робот

Обнаружение изменения состояния JRadioButton

Как я могу определить, когда JRadioButton был изменен с "unselected" на "selected" при нажатии мышью? Я попытался использовать ActionListener на кнопке, но это срабатывает каждый раз, когда клик нажимается, а не только при изменении состояния на "selected".

Я думал о сохранении логической переменной, которая запоминает состояние кнопки и проверяет ее внутри ActionListener, чтобы увидеть, нужно ли менять ее состояние, но мне интересно, есть ли гораздо лучшее или более чистое решение.

4b9b3361

Ответ 1

Посмотрите на JRadioButton. addItemListener()

EDIT: маловероятно, что вы хотите использовать changeListener, поскольку он срабатывает несколько раз за клик. ItemListener срабатывает только один раз за клик. Смотрите здесь

EDIT2: просто чтобы развернуть это, actionListener на jradioButton будет срабатывать каждый раз, когда пользователь нажимает на него, даже если он уже выбран. если это то, что вы хотите, хорошо, но я нахожу это раздражающим. Я только хочу, чтобы вас уведомили, что оно выбрано или отменено.

A ChangeListener будет запускаться для всех видов вещей, что означает, что ваш слушатель получит 5 или более событий за клик. Нехорошо.

Элемент itemlistener будет срабатывать только при изменении выбранного или отмененного состояния. Это означает, что пользователь может нажимать на него несколько раз, и он не срабатывает, если он не изменяется. В методе обработчика вам нужно будет иметь проверку блока if для статуса SELECTED или DESELECTED и делать все, что есть:

@Override
public void itemStateChanged(ItemEvent e) {
    if (e.getStateChange() == ItemEvent.SELECTED) {
        // Your selected code here.
    }
    else if (e.getStateChange() == ItemEvent.DESELECTED) {
        // Your deselected code here.
    }
}

Это просто работает лучше, потому что вы знаете, что если вы находитесь в методе, то радиокнопка либо была выбрана, либо не выбрана, а не то, что пользователь просто стучит по интерфейсу по какой-то неизвестной причине.

Ответ 2

Я считаю, что вы хотите добавить реализацию ChangeListener.