2013-10-17 48 views
1

我有一個JPanel,窗口和一個JPanels和JLabels數組。我想爲JFrame添加5個JPanel,併爲每個JPanel添加一個JLabel。每個JPanel將被用來表示關於骰子的數據。使用for循環將JPanels添加到JFrame

但是,當我運行代碼時,只有最後一個JPanel出現在帶有文本「Dice 4」的JFrame上。我不明白爲什麼。

代碼:

public static void main(String args[]) { 

    JFrame window = new JFrame("DICE Frame"); 
    window.setVisible(true); 
    window.setTitle("DIE"); 
    window.setSize(400, 200); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JPanel[] diceView=new JPanel[5]; 
    JLabel[] labels=new JLabel[5]; 
    for(int i=0; i<diceView.length; i++) { 

     diceView[i]=new JPanel(); 

     window.add(diceView[i]); 

     labels[i]=new JLabel(); 
     labels[i].setText("Dice "+i); 
     diceView[i].add(labels[i]); 

    } 
} 
+1

您使用的是什麼佈局管理器?顯而易見的答案是,你將所有的面板放在同一個位置,所以4位於3的頂部,位於2的頂部,這是...... – John3136

回答

3

一個JFrame的contentPane的(你添加一些東西,當你調用JFrame#add(...)到)使用BorderLayout的默認,而當你在默認方式將組件添加到它的成分被添加BorderLayout.CENTER。

解決方案是將您的其他JPanel添加到使用您認爲必要的任何佈局(或使用佈局的嵌套JPanel)的JPanel,然後將此容器JPanel添加到您的JFrame BorderLayout.CENTER。

請查看Layout Manager Tutorial瞭解更多信息。要理解的一個關鍵概念是可以嵌套JPanel,每個JPanel使用自己的簡單佈局管理器,從而僅使用簡單易用的佈局管理器就可以實現複雜的佈局。

2

因爲你的JPanels反覆添加和骰子0,骰子1,骰子2,骰子3留在骰子4下,因此你只能看到骰子4.如果你想看到其他骰子,那麼你應該使用佈局如flowlayout, boxlayout ...

2

您的JFrame已指定默認BorderLayout。嘗試使用不同的佈局,如下所示:

window.setLayout(new FlowLayout()); 

您將看到您的其他JPanel。 Check this out for more detailed info