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());
是的,那就行了。但有时我想在不激活触发器的情况下改变它。