2012-10-12 41 views
2

我仍然試圖找出JavaSwing中的BorderLayout,這真的令人沮喪。JavaSwing佈局混亂/ Difficullties

我想能夠將窗格拆分爲3個包含的子面板,但我不完全確定如何包含它。

這是我的類Game,其中包含面板ControlPanel,StatePanel和Board(實際上只是JPanel的擴展)。我想在面板分割成這樣那三個部分: simple picture

這是到目前爲止我的代碼:

public class Game extends JPanel { 
    private int panespace=2; 
    private JPanel ControlPanel; 
    private JPanel StatePanel; 
    private Board board; 
    public Game() 
    { 
     setLayout(new BorderLayout(panespace, panespace)); 
     ControlPanel=new JPanel(); 
     ControlPanel.setLayout(new BorderLayout(panespace, panespace)); 
     ControlPanel.setBorder(new LineBorder(Color.red, 10)); 
     ControlPanel.setSize(100,100); 
     super.add(ControlPanel, BorderLayout.EAST); 
     StatePanel=new JPanel(); 
     StatePanel.setLayout(new BorderLayout(panespace, panespace)); 
     StatePanel.setBorder(new LineBorder(Color.green, 10)); 
     StatePanel.setSize(200, 200); 
     super.add(StatePanel, BorderLayout.EAST); 
     board = new Board(); 
     board.setLayout(new BorderLayout(panespace, panespace)); 
     board.setBorder(new LineBorder(Color.yellow, 10)); 
     board.setSize(300, 300); 
     super.add(board, BorderLayout.NORTH); 
     setVisible(true); 
    } 
} 

最好,這將使用BorderLayout的,但我似乎不正確地這樣做。我嘗試閱讀Oracle提供的資料,但它們並沒有特別有用。在這一點上,我處於想要對代碼進行硬編碼的地步,但我知道我應該能夠將其分割爲讓每個面板儘可能多地佔據更大的遊戲面板。

+1

請學習java命名約定並堅持使用它們。 – kleopatra

回答

1

您正在EAST上添加ControlPanel和StatePanel。嘗試在WEST上添加ControlPanel。

3

正如mkhelif所說,你不能在同一個槽中有兩樣東西。你想要的是board進入CENTER,然後在SOUTH中創建另一個JPanel,其中ControlPanelStatePanelFlowLayout中。

1

除了東/東西,你還擴展JPanel而不是JFrame。即,在這裏你有

public class Game extends JPanel 

你可能想

public class Game extends JFrame 

您還成立了邊界,而是把沒有在面板,所以邊框環繞一個空的空間,使他們看起來像粗線代替的實際邊界。您可以嘗試在每個面板中添加一個JTextArea。

此外,當您通過拖動邊框來更改大小時,CENTER部分(您不使用)會變大。如果你想得到我想要的結果,你將不得不使用不同的佈局。

祝你好運!

+2

不需要擴展JFrame(除了做自定義繪畫外,沒有必要擴展JPanel) - 所有的JSomething都應該被原樣使用。 – kleopatra

+0

@kleopatra你可能是正確的JFrame的事情。當我將代碼複製到我的電腦時,我添加了一個setDefaultCloseOperation,它可以在JFrame而不是JPanel上工作,但這超出了所要求的範圍。但我確實認爲她需要擴展一個或另一個,否則setLayout,setVisible和.add不起作用。 – Roy

+0

_she需要擴展一個或另一個在問題的範圍或不是:它只是錯誤(提示:用法與繼承)。你可能會考慮刪除答案的這一部分。 – kleopatra