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;
}