Вопрос

Как я могу определить, когда 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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top