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



我使用的是带有 3 个选项卡和 Netbeans 7.3 的 JTabbedPane。当我打开窗格时,它会打开第一个选项卡,这是应该的。但是,如果我尝试切换到第三个选项卡,则会显示第二个选项卡的组件,即使在 JTabbedPane 的更改侦听器中也是如此,jTabbedPane.getSelectedIndex() == 2,应有的状态。

仅当您切换到第二个选项卡,然后打开第三个选项卡时,才会显示第三个选项卡的组件。之后,行为是正常的。

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

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

我的症状与OP描述的症状相同 - 一个JTabbedPane选项卡的组件"渗入"到另一个选项卡。 虽然我不能确定这是由同一件事引起的,因为 OP 从未遵守发布 SSCCE 的请求,但我想我会发布以下内容,以防其他人将来遇到这种情况。

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

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