2012-11-26 67 views
1

我真的有麻煩把三個不同的面板放在一個框架上,因爲我需要在每個面板上有不同的佈局。我似乎無法讓它工作,現在我一直在嘗試連續4天。我無法找到我在這個代碼中出錯的地方。3個面板ontop 1個框架

我正在做這個最好的方法?任何想法或幫助將不勝感激!!!!!

我的代碼:

public Mem() { 
    super("3 panels on 1 frame");  

    JFrame frame = new JFrame(); 

    setSize(500, 500);  
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    JPanel p1 = new JPanel(); 
    JPanel p2 = new JPanel(); 
    JPanel p3 = new JPanel(); 

    //Adding three different panels with borderlayout 
    frame.setLayout(new BorderLayout()); 

    //Panel 1 is the Player Panel with labels 
    JLabel ply1 = new JLabel("Player 1"); 
    JLabel ply2 = new JLabel("Player 2"); 
    JLabel ply3 = new JLabel("Player 3"); 
    JLabel ply4 = new JLabel("Player 4"); 
    p1.add(ply1); p1.add(ply2); p1.add(ply3); p1.add(ply4); 

    //Panel 2 is the game panel with playingcards on it. (Clickable buttons) 
    JButton card1 = new JButton("Card"); 
    p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); 
    p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); 

    //Panel 3 is the lower panel with the buttons new game & close on it. 
    JButton newGame = new JButton("New Game"); 
    newGame.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      startGame(); 
     } 
    }); 
    JButton endGame = new JButton("Close"); 
    endGame.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      closeGame(); 
     } 
    }); 
    p3.add(newGame); 
    p3.add(endGame); 


    frame.add(p1, BorderLayout.EAST); 
    frame.add(p2, BorderLayout.CENTER); 
    frame.add(p3, BorderLayout.SOUTH); 

    setVisible(true); 
} 
+2

@ user1501127您還沒有告訴我們它出了什麼問題。你期待它做什麼以及它對當前代碼做了什麼?使用'setLayout'將佈局放在面板 – WilliamShatner

回答

4

你出現在您的面板被安裝到永遠不會在你的Mem框架構造出的JFrame。你可以刪除或註釋行:

JFrame frame = new JFrame(); 

及用途:

add(p1, BorderLayout.EAST); 
add(p2, BorderLayout.CENTER); 
add(p3, BorderLayout.SOUTH); 

然後,您就可以看到組件是如何安排你的面板任何佈局應用:

p1.setLayout(new GridLayout(2, 2)); 
// etc. 
+0

+1上可以很好地回答問題。我只發佈了我自己的答案,因爲還有一些其他的小事情,它並沒有沉溺於你說的話,直到我試圖解決OP的問題。 –

+0

'add(p1,BorderLayout.EAST); .. add(p3,BorderLayout.SOUTH);'也考慮使用'add(p1,BorderLayout.LINE_END); .. add(p3,BorderLayout。PAGE_END);'更適應不同的文本方向。 –

5

有幾件事情:

1)多次添加揮杆組件不會重複 - 它會被刪除並添加到新位置。所以這個:

JButton card1 = new JButton("Card"); 
p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); 
p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); p2.add(card1); 

是一樣的:

JButton card1 = new JButton("Card"); 
p2.add(card1); 

2)好像你的類擴展JFrame。如果是這樣,請刪除所有對JFrame frame = new JFrame();的引用。通過使用frame變量,您正在創建一個要添加面板的框架,但不顯示。所以無處不在你看到frame.刪除它。

例子:

frame.setLayout(new BorderLayout()); 

成爲

setLayout(new BorderLayout()); 

3)我敢肯定,你們中的一些問以前曾接受的答案,或者你想出了一個可以接受的答案你自己的問題。您可以獎勵那些幫助的人,或者您可以提供您找到並接受的答案。那麼更多的人會花時間爲您提供一個很好的答案。這對你更好,對我們來說更好,對於和你同樣問題的隨機人來說更好。

+0

+1:'setLayout(new BorderLayout());'行可以完全移除,因爲這是'JFrame'的默認佈局。 :) – Reimeus