java-停用侦听器

java-停用侦听器,java,swing,listener,jtabbedpane,changelistener,Java,Swing,Listener,Jtabbedpane,Changelistener,我有一个关于听众的一般性问题 假设我有两个JTabbedPanes,两个都有一个ChangeListener。它们都会显示,我希望它们都显示相同的窗格(索引),因此当用户更改其中一个窗格中的选定窗格时,其他窗格也会更改。 简而言之,一个JTabbedPane侦听器使用setSelectedTab()更改另一个JTabbedPane 显然,第一个侦听器将激活第二个侦听器,第二个侦听器将在无休止的操作中重新激活第一个侦听器 这将通过布尔运算解决。 有更聪明的方法吗? 有没有办法在不触发侦听器的情况下

我有一个关于听众的一般性问题

假设我有两个
JTabbedPane
s,两个都有一个
ChangeListener
。它们都会显示,我希望它们都显示相同的窗格(索引),因此当用户更改其中一个窗格中的选定窗格时,其他窗格也会更改。
简而言之,一个JTabbedPane侦听器使用
setSelectedTab()
更改另一个
JTabbedPane
显然,第一个侦听器将激活第二个侦听器,第二个侦听器将在无休止的操作中重新激活第一个侦听器

这将通过布尔运算解决。
有更聪明的方法吗?
有没有办法在不触发侦听器的情况下更改选项卡?
有没有办法只在用户更改侦听器而不是代码时激活它

多谢各位


顺便说一句:我总是对按钮有同样的问题。但是通过按钮,我从侦听器中获取代码并将其放入一个方法中。当一个按钮需要激活一个按钮时,它会调用其代码。但在JTabbedPane中则不同。

简单的解决方案是仅在必要时采取行动。例如:

if(currentTab != desiredTab) {
  // change tab
}
这将防止无限循环


如果您需要能够打开和关闭行为,那么使用布尔标志并不是一个坏方法。另一种方法是使用删除侦听器。该标志可能更有效,因为它可以避免内存分配和释放,但很大程度上取决于您的情况的其他细节。

共享selectionModel,如

 secondTabbedPane.setModel(otherTabbedPane.getModel());

是的,那就行了。但有时我想在不激活触发器的情况下改变它。