我有一个关于听众的一般性问题。
假设我有两个 JTabbedPane
,并且都有一个 ChangeListener
。它们都显示出来,我希望它们都显示相同的 Pane (索引),这样当用户更改其中一个 Pane 中的选定 Pane 时,其他 Pane 也会发生变化。
简而言之,一个 JTabbedPane 监听器使用 setSelectedTab()
更改另一个 JTabbedPane
。
显然,第一个监听器将激活第二个监听器,第二个监听器将在无休止的操作中重新激活第一个监听器。
这将通过 boolean 值来解决。
有更聪明的方法吗?
有没有办法在不触发监听器的情况下更改选项卡?
有没有办法仅在用户更改监听器而不是代码时激活监听器?
谢谢。
顺便说一句:我总是对按钮有同样的疑问。但使用按钮时,我从监听器获取代码并将其放入方法中。当“一个按钮”需要激活一个按钮时,它会调用其代码。但在 JTabbedPane 中则不同。
最佳答案
简单的解决方案是仅在必要时采取行动。例如:
if(currentTab != desiredTab) {
// change tab
}
这将防止无限循环。
如果您需要能够打开和关闭该行为,那么使用 boolean 标志并不是一个坏方法。另一种方法是使用 removeChangeListener 删除监听器。 。该标志可能性能更高,因为它可以避免内存分配和释放,但很大程度上取决于您情况的其他细节。
关于java - 停用监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6776276/