2015-12-15 73 views
0

我試圖運行CardLayout,但不知道爲什麼show()CardLayout不起作用。我收到錯誤。CardLayout方法顯示()不工作在awt

package java_files; 

import java.awt.*; 
import java.awt.event.*; 

//import javax.swing.JButton; 

public class AwtLayoutExample { 
    public static void main(String args[]) 
    { 
     Frame f=new Frame("Card Layout"); 
     f.setSize(400,400); 
     f.setVisible(true); 
     f.addWindowListener(new WindowAdapter(){ 
      public void windowClosing(WindowEvent e){ 
       System.exit(0); 
      } 
     }); 
     CardLayout card=new CardLayout(); 
     f.setLayout(card); 
     Panel panelCont=new Panel(); 
     Panel panelFirst=new Panel(); 
     Panel panelSecond=new Panel(); 
     Button b1=new Button("Switch to 2nd Panel"); 
     Button b2=new Button("Switch to 1st Panel"); 
     panelFirst.add(b1); 

     panelSecond.add(b2); 
     panelFirst.setBackground(Color.CYAN); 
     panelSecond.setBackground(Color.GREEN); 
     panelCont.add(panelFirst,"1"); 
     panelCont.add(panelSecond, "2"); 
     card.show(panelCont, "1");  
     b1.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
     card.show(panelCont, "2"); 
     } 
     }); 
     b2.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e){ 
       card.show(panelCont, "2"); 
      } 
     }); 
     f.add(panelCont); 
     f.pack(); 
     f.setVisible(true); 
    } 
} 

我只是得到一個空白框架,當我與這個錯誤一起運行它。

Exception in thread "main" java.lang.IllegalArgumentException: wrong parent for CardLayout 
    at java.awt.CardLayout.checkLayout(Unknown Source) 
    at java.awt.CardLayout.show(Unknown Source) 
    at java_files.AwtLayoutExample.main(AwtLayoutExample.java:33) 
+0

您申請'CardLayout'到'框架「,但使用'panelCont'作爲您嘗試切換的容器。看看[如何使用CardLayout](http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html)。此外,AWT API在16年前被Swing所取代,你會得到更好的Swing和JavaFX支持,那麼你將爲AWT – MadProgrammer

回答

0

您可以申請CardLayout於面板,然後添加其他面板到這個小組

Panel panelCont=new Panel(new CardLayout()); 
panelCont.add("one", panelOne); 
panelCont.add("two", panelTwo); 
panelCont.add("three", panelThree); 

當節目,你可以這樣做:

((CardLayout) panelCont.getLayout()).show(panelCont, "two"); 
+0

感謝它的工作。但我認爲它是因爲它的小複雜。使用擺動更簡單。 –

+0

CardLayout在兩者中都是一樣的,但我建議你使用Swing,它更好一些 –