Обнаружение изменения состояния JRadioButton
-
07-07-2019 - |
Вопрос
Как я могу определить, когда JRadioButton изменяется с «невыбранный» на «выбранный» при щелчке мышью? Я пытался использовать ActionListener на кнопке, но он срабатывает при каждом нажатии радиокнопки, а не только при изменении состояния на «выбранный».
Я думал о том, чтобы поддерживать булеву переменную, которая запоминает состояние кнопки, и тестировать ее внутри ActionListener, чтобы увидеть, нужно ли менять ее состояние, но мне интересно, есть ли гораздо лучшее или более чистое решение.
Решение
Посмотрите на JRadioButton. addItemListener () р>
РЕДАКТИРОВАТЬ: маловероятно, что вы захотите использовать changeListener, так как он срабатывает несколько раз за клик. ItemListener срабатывает только один раз за клик. см. здесь
РЕДАКТИРОВАТЬ 2: Просто чтобы расширить это, actionListener на jradioButton будет срабатывать каждый раз, когда пользователь нажимает на него, даже если он уже выбран. если это то, что вы хотите, хорошо, но я нахожу это раздражающим. Я только хочу получать уведомления, если он выбран или отменен.
ChangeListener будет запускаться для всех видов вещей, а это означает, что ваш слушатель будет получать 5 или более событий за клик. Не хорошо.
Элементный список запускается только , если выбранное или отмененное состояние изменяется. Это означает, что пользователь может щелкнуть по нему несколько раз, и он не сработает, если не изменится. В вашем методе-обработчике вы должны будете иметь блок 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.
}
}
Это просто работает лучше, потому что вы знаете, что если вы находитесь в методе, то радиокнопка была либо просто выбрана, либо отменена, а не то, что пользователь просто стучит по интерфейсу по неизвестной причине. Р>
Другие советы
Полагаю, вы хотите добавить реализацию ChangeListener
.