Java 如何控制嵌套在JtabbedPane中的面板?

Java 如何控制嵌套在JtabbedPane中的面板?,java,swing,parent-child,jtabbedpane,Java,Swing,Parent Child,Jtabbedpane,我有一个MainJtabbedPane包含多个jtabbedpane每个jtabbedpane包含多个窗格 我需要能够从MainJtabbedPane访问窗格 JTabbedPane[] components = (JTabbedPane[]) Main_Tabbed_Panel.getComponents(); for(int i=0; i<components.length;i++) { for(int j=0;j<components[i].getTabCount();j++

我有一个
MainJtabbedPane
包含多个
jtabbedpane
每个
jtabbedpane
包含多个窗格

我需要能够从
MainJtabbedPane
访问窗格

JTabbedPane[] components = (JTabbedPane[]) Main_Tabbed_Panel.getComponents();

for(int i=0; i<components.length;i++)
{
for(int j=0;j<components[i].getTabCount();j++)
{
.....
}
}

JTabbedPane[]组件=(JTabbedPane[])主选项卡面板.getComponents();
对于(int i=0;i
getComponents()方法返回一个组件数组。即使您知道所有组件都是JTabbedPane的实例,也不能将它们强制转换为JTabbedPane。您的代码结构需要如下所示:

for(Component component: main_Tabbed_Panel.getComponents())
{
    if (component instanceof JTabbedPane)
    {
        JTabbedPane tabbePane = (JTabbedPane)component;

        // do something with the tabbed pane
    }
}
另外,遵循Java命名约定。变量名不应以大写字符开头。(即,“主选项卡”窗格不遵循约定)。

(JTabbedPane[])
转换为
(组件[])
。如果将鼠标悬停在
getComponents()
方法上,您将看到它返回
组件[]

如果要将
组件[]
转换为
JTabbedPane[]
,则需要手动进行转换,并确保在转换过程中检查错误(在将其添加到JTabbedPane[]之前确保其为JTabbedPane)

JTabbedPane[]panes=convertComponents(getComponents());
专用JTabbedPane[]组件(组件[]组件){
JTabbedPane[]窗格=组件长度>0?新JTabbedPane[组件长度]:空;
如果(窗格!=null)
对于(int i=0;i
尽管这不是最有效的,因为对于getComponents()中不是JTabbedPane的每个项目,JTabbedPane数组中都会有一个空白点,您必须清理它

JTabbedPane[]panes=comps.length>0?新JTabbedPane[comps.length]:空;

这首先检查通过参数传递的组件[]是否有1个或多个空格。如果没有,不要麻烦用实例初始化

if(窗格!=null)

由于有可能
窗格
会初始化为
null
,因此在尝试使用它之前,我们会进行大量检查

for(inti=0;i

由于
Component[]comps
JTabbedPane[]panes
具有相同的大小,因此使用哪种长度无关紧要,只要我们知道循环次数即可

if(JTabbedPane的comps[i]实例)

这就是我所说的“如果组件不是
JTabbedPane
,那么数组中会有一个空空间”。这将在将它放入窗格数组之前检查它是否是
JTabbedPane
。如果不是,它将被完全忽略,
窗格中的空间将保留为空


循环完成后,它将返回我们刚才制作的数组。

您能给我们看一下完整的堆栈跟踪,以及堆栈跟踪的相关代码吗?主选项卡面板。getComponents()是一个
组件[]
,而不是
JTabbedPane[]
,这就是强制转换错误。
变量名不应以大写字符开头
-除非它是一个常量:)+1用于指出约定和简化算法谢谢你这很好,谢谢约定问题如何获得第二个循环的制表符计数或长度?这是我关心的问题
for(Component component: main_Tabbed_Panel.getComponents())
{
    if (component instanceof JTabbedPane)
    {
        JTabbedPane tabbePane = (JTabbedPane)component;

        // do something with the tabbed pane
    }
}
JTabbedPane[] panes = convertComponents(getComponents());

private JTabbedPane[] convertComponents(Component[] comps) {
    JTabbedPane[] panes = comps.length > 0? new JTabbedPane[comps.length] : null;
    if(panes != null)
        for(int i = 0; i < panes.length; i++) {
            if(comps[i] instanceof JTabbedPane)
            panes[i] = (JTabbedPane) comps[i];
        }
    return panes;
}