1

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

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

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

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

4

1 回答 1

3

我的症状与 OP 所描述的症状相同——一个JTabbedPane选项卡中的组件“流血”到另一个选项卡。尽管我不能确定这是由同一件事引起的,因为 OP 从未遵守发布 SSCCE 的请求,但我想我会发布以下内容,以防其他人将来遇到此问题。

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

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

于 2016-05-31T19:28:53.420 回答