作者sbrhsieh (sbr)
看板java
标题Re: [问题] CardLayout的使用
时间Thu Feb 26 22:57:22 2009
※ 引述《coolsprite (烟火经销商)》之铭言:
: http://bbs.wefong.com/viewthread.php?tid=1870564
: 遇到的问题跟论坛上的一样
: JFrame 怎麽使用 CardLayout?
: 还是他不能使用cardlayout?
: 以下是论坛上的程式码
: 在下列的程式码中,f 使用 swing 的 JFrame 出现以下错误讯息:
: IllegalArgumentException: wrong parent for CardLayout
: 若改用 AWT 的 Frame 就可正常运作。
: 请问各位,若想在 JFrame 上使用 CardLayout 需要如何修改?
请翻阅 javax.swing.JFrame API doc 有关 add, setLayout 等 method 的部份。
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JFrame.html
从 JRE 1.5 开始,JFrame add/setLayout 等 method 的实作是把这些操作
forward 给 JFrame 的 content pane。(我个人觉得这个决定实在不好,似乎是
因为太多刚接触 swing 的人一开始都直觉地把元件往 JFrame 里放,然後被一个
预设检查所丢出的 exception 吓到,特地改成 forward 到 content pane,但实际
上没有去了解 RootPaneContainer 的人,还是会遇到改成如此後所衍生的问题)
http://www.javaworld.com.tw/jute/post/view?bid=5&id=6986&sty=3&keywords=JRootPane
所以你写的程式里,是把两个 panel 放进 JFrame's content pane 里,不是
直接当作 JFrame 的 child component。
java.awt.CardLayout - show method 需要指定要切换的 container,你的程式
指明是某个 JFrame object 就错在这里(实际上使用此 CardLayout object 的是
contentPane(f.getContentPane())。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.143.220
※ 编辑: sbrhsieh 来自: 218.173.143.220 (02/26 23:05)
1F:推 coolsprite:所以,要把panel放到JFrame中,才有cardLayout的效果? 02/26 23:18
2F:推 coolsprite:不好意思~我是新手麻烦指导!谢谢 02/26 23:22
不是这个意思。我的意思是以你这个程式来说,两个 panel 的 parent 是 JFrame's
content pane,使用 CardLayout 来切换显示两个 panel 时,第一个参数应是
content pane。
//myCard.show(f, "1");
myCard.show(f.getContentPane(), "1");
※ 编辑: sbrhsieh 来自: 218.173.143.220 (02/26 23:41)
3F:推 coolsprite:ok 我了解了!感谢你的指导 02/26 23:46