Re: [問題] CardLayout的使用

看板java作者 (sbr)時間17年前 (2009/02/26 22:57), 編輯推噓3(300)
留言3則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
所以,要把panel放到JFrame中,才有cardLayout的效果?
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
ok 我瞭解了!感謝你的指導
02/26 23:46, 3F
文章代碼(AID): #19fgtMgI (java)
討論串 (同標題文章)
文章代碼(AID): #19fgtMgI (java)