Swing cardlayout wrong parent for CardLayout问题

来源:互联网 发布:富士通扫描仪软件 编辑:程序博客网 时间:2024/04/30 21:30
最近在写一个Swing的东西,用到了cardlayout,但却在进行切换的时候出现了
 Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: wrong parent for CardLayout 

的异常,看了一下代码,是将Jframe设为cardlayout的,但是在
cardLayout.show(this, "play");

的时候出现 wrong parent for Cardlayout,究竟是怎么回事呢?

然后我将代码改为

cardLayout.show(this.getContentPane(), "play");

就可以用了。

具体原理我也不清楚,但是我认为是跟Swing的结构有关,因为在Swing中 组件不是直接填加在Jframe上

先推荐看一个帖子Jframe的层次结构  Java 8 司马大婶写的,是个前辈,至少是我的前辈。

      Jframe中又个contentpanel,就是 满是组件的那个面板,add()方法添加的组件其实是添加到了contenpanel上,那么反过来说,组件的parent其实contentpanel。所以在上面会出现上面的问题。show()方法的说明

 void java.awt.CardLayout.show(Container parent, String name)Flips to the component that was added to this layout with the specified name, using addLayoutComponent. If no such component exists, then nothing happens.Parameters:parent the parent container in which to do the layoutname the component nameSee Also:java.awt.CardLayout.addLayoutComponent(java.awt.Component, java.lang.Object)

第一个参数是响应布局的父容器。


因为Swing的层次结构是这样,所以出现了wrong parent的问题。


以上纯属个人的理解与看法,有任何不对的地方还请指出,多谢。小弟不胜感激~~