Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: wrong parent for 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 layout name the component name See Also: java.awt.CardLayout.addLayoutComponent(java.awt.Component, java.lang.Object)
因为Swing的层次结构是这样,所以出现了wrong parent的问题。
以上纯属个人的理解与看法,有任何不对的地方还请指出,多谢。小弟不胜感激~~