我有一个关于听众的一般性问题。
假设我有两个JTabbedPane
,并且都有ChangeListener
。它们都显示,我希望它们都显示相同的窗格(索引),因此当用户将所选窗格更改为一个时,其他窗格也会更改。
简而言之,一个JTabbedPane侦听器使用JTabbedPane
更改另一个setSelectedTab()
显然,第一个监听器将激活第二个监听器,第二个监听器将在无休止的操作中重新激活第一个监听器。
这将由布尔人解决
有更聪明的方法吗?
有没有办法在不触发监听器的情况下更改标签?
有没有办法只在用户更改它而不是代码时激活侦听器?
谢谢。
顺便说一下:我总是和按钮有同样的问题。但是使用按钮我会从侦听器中获取代码并将其放入方法中。当一个按钮需要激活按钮时,它会调用其代码。但是在JTabbedPane中它是不同的。答案 0 :(得分:4)
简单的解决方案是仅在必要时采取行动。例如:
if(currentTab != desiredTab) {
// change tab
}
这将阻止无限循环。
如果您需要能够打开和关闭行为,那么使用布尔标志并不是一个糟糕的方法。另一种方法是使用removeChangeListener删除侦听器。该标志可能更具性能,因为它可能避免内存分配和释放,但很大程度上取决于您的情况的其他细节。
答案 1 :(得分:3)
分享selectionModel,比如
secondTabbedPane.setModel(otherTabbedPane.getModel());