java - деактивировать прослушиватель

У меня общий вопрос относительно слушателей.

Допустим, у меня есть два JTabbedPane и оба имеют ChangeListener. Они оба отображаются, и я хочу, чтобы они оба отображали одну и ту же панель (индекс), поэтому, когда пользователь меняет выбранную панель в одной, другая также изменяется.
Короче говоря, один прослушиватель JTabbedPane изменяет другой JTabbedPane с помощью setSelectedTab(). > Очевидно, что первый прослушиватель активирует второй прослушиватель, а второй повторно активирует первый в бесконечной операции.

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

Спасибо.

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


person Bick    schedule 21.07.2011    source источник


Ответы (2)


Простое решение — действовать только тогда, когда это необходимо. Например:

if(currentTab != desiredTab) {
  // change tab
}

Это предотвратит бесконечный цикл.

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

person sje397    schedule 21.07.2011
comment
Yepp, Это сделает это. Но я хочу изменить его иногда, не активируя триггер. - person Bick; 21.07.2011

поделитесь моделью выбора, например

 secondTabbedPane.setModel(otherTabbedPane.getModel());
person kleopatra    schedule 21.07.2011