множественный экземпляр события слушателя JButton в JLists - PullRequest
0 голосов
/ 10 ноября 2010

Я создал диалог с двумя отображаемыми списками JList и кнопкой, которая берет выбранное значение из второго JList и что-то делает (например, выводит выбранное значение). Список значений из второго JList обновляется в соответствии с выбором значения из первого JList.

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

Проблема в том, что каждый раз, когда нажимается кнопка, количество выходных сообщений равно времени, когда выбрано значение второго JList. Например, если я выберу значение из второго JList, затем передумаю и выберу другое значение, нажатие кнопки выведет сообщение два раза. Кто-нибудь знает способ предотвратить такую ​​вещь?

Ответы [ 4 ]

2 голосов
/ 10 ноября 2010

Ваш ListSelectionListener должен проверить на (e.getValueIsAdjusting() == false), иначе вы будете отвечать на все выборы пользователя, а не только на последний.

1 голос
/ 10 ноября 2010

Он отлично делает то, что должен делать.

Вызывает два события,

1> Выбор удаляется из первого элемента.

2> Выбор выполняется для второго элемента.

Так же, как fbcocqсказал, что вы должны проверить для getValueIsAdjusting ().Проверьте это , это поможет.

1 голос
/ 10 ноября 2010

Да: не кэшируйте выборки, просто обработайте фактический выбор во втором списке.

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

Это похоже на предполагаемое поведение, потому что вы обычно не пишете это случайно;)

Если это предусмотрено, и вы просто хотите исключить дубликаты, рассмотрите возможность использования Set вместо списка, так как Set будет содержать только уникальные значения.

0 голосов
/ 10 ноября 2010

Вы добавляете ActionListener к кнопке каждый раз, когда вы ее включаете?

...