Re: [問題] CardLayout的使用
※ 引述《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)
推
02/26 23:18, , 1F
02/26 23:18, 1F
推
02/26 23:22, , 2F
02/26 23:22, 2F
不是這個意思。我的意思是以你這個程式來說,兩個 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)
推
02/26 23:46, , 3F
02/26 23:46, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):