0

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

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

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

谢谢你。

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

4

2 回答 2

4

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

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

这将防止无限循环。

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

于 2011-07-21T12:49:12.810 回答
3

分享 selectionModel,比如

 secondTabbedPane.setModel(otherTabbedPane.getModel());
于 2011-07-21T15:33:31.467 回答