JTabbedPane首先显示错误的选项卡组件

时间:2013-10-10 17:33:25

标签: java swing jtabbedpane

我正在使用带有3个标签和Netbeans 7.3的JTabbedPane。当我打开窗格时,它会打开第一个标签,就像它应该的那样。但是,如果我尝试切换到第三个选项卡,则会显示第二个选项卡的组件,即使在JTabbedPane的ChangeListener中,也应显示jTabbedPane.getSelectedIndex() == 2,

只有切换到第二个选项卡,然后打开第三个选项卡,才会显示第三个选项卡的组件。在那之后,行为是正常的。

我能找到的最接近的是这个错误: JTabbedPane.getTabComponentAt(int) returning null

以前有没有人遇到这样的事情?我通过“访问”构造函数中的第二个选项卡来解决它。

1 个答案:

答案 0 :(得分:3)

我的症状与OP所描述的症状相同 - 来自一个JTabbedPane标签的组件“渗透”到另一个标签。虽然我不能确定它是由同一件事造成的,因为OP从未遵守发布SSCCE的请求,但我想我会发布以下内容以防其他人在将来遇到这个问题。

我的问题的根源是我在已添加到setVisible()的组件上调用JTabbedPane。在经过漫长的搜索后,我想到了https://bugs.openjdk.java.net/browse/JDK-6191978。根据该错误报告,JTabbedPane内部使用了可见性概念,并且在外部更改它会使选项卡管理器混淆。 JTabbedPane中的组件永远不应该调用其setVisible()方法;相反,用户应调用setSelectedComponent()setSelectedIndex()以显示标签内容。 (现在JDK API文档中记录了这一点,但是在最初编写代码时它没有回来......)

希望这可以节省一些人在搜索和调试的时间......