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

Java JTabbedPane首先显示错误的选项卡组件,java,swing,jtabbedpane,Java,Swing,Jtabbedpane,我正在使用一个有3个选项卡和Netbeans 7.3的JTabbedPane。当我打开窗格时,它会打开第一个选项卡,这是应该的。但是,如果我尝试切换到第三个选项卡,则第二个选项卡的组件将显示出来,即使在JTabbedPane的ChangeListener中,JTabbedPane.getSelectedIndex()==2,,它应该是这样的 仅当切换到第二个选项卡,然后打开第三个选项卡时,才会显示第三个选项卡的组件。在那之后,行为是正常的 我能找到的最接近的东西是这个错误: 以前有人遇到过这样

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

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

我能找到的最接近的东西是这个错误:


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

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

问题的根源是,我正在对添加到
JTabbedPane
的组件调用
setVisible()
。经过长时间的搜索,我终于找到了答案。根据该bug报告,
JTabbedPane
在内部使用了可见性的概念,而在外部更改它会混淆选项卡管理器。
JTabbedPane
中的组件不应调用其
setVisible()
方法;相反,用户应该调用
setSelectedComponent()
setSelectedIndex()
以显示选项卡内容。(现在JDKAPI文档中已经记录了这一点,但它并没有回到最初编写代码的时候……)


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

也许您正在初始化第二个选项卡构造函数中第三个选项卡上的内容,或者是与此相关的侦听器。要更快地获得更好的帮助,请发布一个。