2013-04-04 53 views
1

大家好,我對此有點問題。我創建了一個JPanel並添加了組件,然後將JPanel添加到容器中。現在當我從main調用這個類時,會彈出一個窗口,但它只顯示JPanel的第一個組件。爲什麼只顯示第一項而不是全部?謝謝。JPanel僅在添加到容器時才顯示一個組件

注意:這段代碼並不完整,我只是想弄明白爲什麼我的組件在展開其他事情之前沒有出現,請解決組件問題。

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.Container; 
import java.awt.FlowLayout; 
import java.awt.event.*; 
import javax.swing.*; 


public class Player extends JFrame implements ActionListener 
{ 
     private CardLayout playerCard; 
     private JPanel cardPanel; 
     public String player1; 
     public String player2; 

     // Constructor: 
     public Player() 
     { 

     setTitle("Game"); 
     setSize(300,200); 
     setLocation(10,200); 
     Container contentPane = getContentPane(); 
     contentPane.setLayout(new FlowLayout()); 

       //set up the panel 
     cardPanel = new JPanel(); 
     playerCard = new CardLayout(); 
     cardPanel.setLayout(playerCard); 

       //get player one name 
     JLabel p1Name = new JLabel("Player 1 Name:"); 
     JTextField oneName = new JTextField(); 

       //get the name for player 2 
     JLabel p2Name = new JLabel("Player 2 Name:"); 
     JTextField twoName = new JTextField(); 

       //the button to start the game 
     JButton start = new JButton("Start"); 

     //add the components << Why is only the first component shown?? 
     cardPanel.add(start); 
     cardPanel.add(p1Name); 
     cardPanel.add(oneName); 
     cardPanel.add(p2Name); 
     cardPanel.add(twoName); 

     contentPane.add("startCard",cardPanel); 
     } 

    @Override 
    public void actionPerformed(ActionEvent arg0) 
    { 
     // TODO Auto-generated method stub 

    } 
} 
+0

我對'contentPane.add(「startCard」,cardPanel);':S – 2013-04-04 00:16:12

+0

感到非常困惑。在我正在使用的書中指出 「CardLayout管理器使用給定的方法逐個顯示添加到其容器的組件,每個組件在添加到組件時都會分配一個字符串名稱,如下所示: 語法: 容器。 add(String_Name,Component);「 將其更改爲僅contentPane.add(cardPanel);沒有什麼區別。 – 2013-04-04 00:21:08

+0

將組件添加到使用FlowLayout的容器時,請重新閱讀您的書籍,因爲您正在使用字符串。 – 2013-04-04 00:22:13

回答

3

您沒有正確使用佈局。使用組件將組件添加到CardLayout組件,而不是FlowLayout時使用字符串常量。並且在add方法中,組件後的字符串常量爲。請閱讀佈局管理器教程,因爲這裏的解釋很好。看起來你正在使用CardLayout,它不應該被使用,這就是爲什麼你只看到一個組件。換句話說,您的程序使用完全低音的佈局。

換句話說,使用CardLayout只能一次顯示一個組成部分,意義,因爲CardPanel都使用CardLayout的容器,它只能顯示一個組成部分,在這裏twoName很可能會顯示在它的唯一的事情。