java - отключить слушателя - PullRequest
0 голосов
/ 21 июля 2011

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

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

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

Спасибо.

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

Ответы [ 2 ]

4 голосов
/ 21 июля 2011

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

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

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

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

3 голосов
/ 21 июля 2011

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

 secondTabbedPane.setModel(otherTabbedPane.getModel());
...