我正在使用带有3个标签和Netbeans 7.3的JTabbedPane。当我打开窗格时,它会打开第一个标签,就像它应该的那样。但是,如果我尝试切换到第三个选项卡,则会显示第二个选项卡的组件,即使在JTabbedPane的ChangeListener中,也应显示jTabbedPane.getSelectedIndex() == 2,
。
只有切换到第二个选项卡,然后打开第三个选项卡,才会显示第三个选项卡的组件。在那之后,行为是正常的。
我能找到的最接近的是这个错误: JTabbedPane.getTabComponentAt(int) returning null
以前有没有人遇到这样的事情?我通过“访问”构造函数中的第二个选项卡来解决它。
答案 0 :(得分:3)
我的症状与OP所描述的症状相同 - 来自一个JTabbedPane
标签的组件“渗透”到另一个标签。虽然我不能确定它是由同一件事造成的,因为OP从未遵守发布SSCCE的请求,但我想我会发布以下内容以防其他人在将来遇到这个问题。
我的问题的根源是我在已添加到setVisible()
的组件上调用JTabbedPane
。在经过漫长的搜索后,我想到了https://bugs.openjdk.java.net/browse/JDK-6191978。根据该错误报告,JTabbedPane
内部使用了可见性概念,并且在外部更改它会使选项卡管理器混淆。 JTabbedPane
中的组件永远不应该调用其setVisible()
方法;相反,用户应调用setSelectedComponent()
或setSelectedIndex()
以显示标签内容。 (现在JDK API文档中记录了这一点,但是在最初编写代码时它没有回来......)
希望这可以节省一些人在搜索和调试的时间......