Обнаружение изменения состояния JRadioButton - PullRequest
29 голосов
/ 15 сентября 2009

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

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

Ответы [ 2 ]

48 голосов
/ 15 сентября 2009

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

РЕДАКТИРОВАТЬ: маловероятно, что вы хотите использовать changeListener, так как он запускается несколько раз за клик. ItemListener срабатывает только один раз за клик. Смотрите здесь

РЕДАКТИРОВАТЬ 2: Просто чтобы расширить это, actionListener на jradioButton будет срабатывать каждый раз, когда пользователь нажимает на него, даже если он уже выбран. если это то, что вы хотите, хорошо, но я нахожу это раздражающим. Я только хочу получать уведомления, если он выбран или отменен.

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.
    }
}

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

0 голосов
/ 15 сентября 2009

Полагаю, вы хотите добавить ChangeListener реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...