Как сделать слушатель, который срабатывает, когда пользователь выбирает элемент в JComboBox - PullRequest
5 голосов
/ 10 декабря 2010

Я ищу слушателя, который запускается ТОЛЬКО, когда пользователь, тот, кто использует программу, выбирает элемент в JComboBox.Я не хочу использовать ActionListener или ItemListener, потому что они также запускаются, когда я выбираю элемент в программе.И я тоже не могу использовать MouseListener, потому что он срабатывает только при нажатии на JComboBox, а не при выборе элемента.

Мне было интересно, как проще всего это сделать?В настоящее время мое решение грязное.Когда я изменяю выбранный элемент jcombobox через код, я устанавливаю флаг в true.А в моем слушателе действий он выполняется только в том случае, если флаг имеет значение false.

1 Ответ

2 голосов
/ 10 декабря 2010

A) Я бы порекомендовал вам временно удалить слушателя, когда вы выполняете выбор программно.

B) Если ваши программные изменения не являются следствием другого события GUI, вы можете решить его следующим образом:-пробный / подверженный ошибкам / "хакерский" способ: установите флажок EventQueue.isEventDispatchThread(), чтобы узнать, был ли щелчок инициирован потоком GUI (пользователь).

C) (Ой, я просто перечиталвопрос и увидел, что вы уже обнаружили метод, описанный ниже. По сути, я бы сказал, что это (или метод, описанный выше) является вашей лучшей альтернативой.)

Другой вариант - иметь логическое значениефлаг, называемый чем-то вроде nonUserSelection, который вы устанавливаете в true перед тем, как программно выбрать значение и впоследствии сбросить в false.В слушатель действия вы просто добавляете

if (nonUserSelection)
    return;
...