java - 停用监听器

时间:2011-07-21 12:47:23

标签: java swing listener jtabbedpane changelistener

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

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

这将由布尔人解决 有更聪明的方法吗?
有没有办法在不触发监听器的情况下更改标签?
有没有办法只在用户更改它而不是代码时激活侦听器?

谢谢。

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

2 个答案:

答案 0 :(得分:4)

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

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

这将阻止无限循环。

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

答案 1 :(得分:3)

分享selectionModel,比如

 secondTabbedPane.setModel(otherTabbedPane.getModel());