Выбор JTree без генерации события

У меня есть JTree, JTable и JList, которые отображают один и тот же набор объектов, но в другом порядке и с разной информацией. Если элемент выбран из одного из компонентов, я хочу выбрать тот же объект в двух других компонентах (это означает, что они должны быть выделены). Естественно, я отслеживаю события выбора с помощью Listener. Вот проблема: когда компонент извлекает выбранный объект, я должен убедиться, что объект выбран в других компонентах, вызвав для них методы выбора. Затем это уведомит слушателей выбора о двух других компонентах. Но каждое из этих событий, в свою очередь, будет вызывать события выбора для компонентов, отличных от самого себя, вызывая бесконечный цикл, проходящий между тремя компонентами.

Я вижу одно решение - использовать логический флаг и заставить слушателей не распространять выбор, если флаг установлен. Однако это кажется громоздким и не элегантным. Есть ли способ просто сказать JTree, JTable и JList сделать выбор, но не запускать какие-либо события (в отличие от запуска события, а затем его перехвата и остановки с помощью логического флага)?


person Raymond    schedule 06.03.2011    source источник


Ответы (2)


Взгляните на SharedModelDemo. Я думаю, что это делает то, что вы ищете.

person z7sg Ѫ    schedule 07.03.2011
comment
да. Спасибо. Это работает. Потребуется некоторая работа, чтобы создать модель, которая работает для Дерева, Таблицы и Списка одновременно, но это кажется лучше, чем хранить логические значения. - person Raymond; 08.03.2011

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

person StanislavL    schedule 07.03.2011
comment
Мне не очень нравится такой подход. Что, если есть несколько слушателей, разве я не буду делать больше работы, чем нужно? Я не ищу работу вокруг. Я ищу правильный дизайн. - person Raymond; 08.03.2011