java - 停用监听器

标签 java swing listener jtabbedpane changelistener

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

假设我有两个 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/

相关文章:

java - JAVA 组件中的鼠标事件

java - 尝试从单个类执行多个布局

java - 在 JSTL 中使用枚举

java - 如何影响反射中方法的顺序

Java制作四子棋游戏面板

android - CheckBox[] 与 onClickListener[]?

java - JTree 'node title edited' 监听器

java - 找不到 Apache Tomcat Maven 插件 war

java - 以编程方式判断您的视觉表单是否正在被预览

java - TicTacToe : text expansion relative to display expansion? 更改监听器?