2013-02-27 44 views
0

我有這種格式的代碼,但jpanels沒有聽我設置的大小。當我運行代碼時,所有三個面板的大小都相同。有什麼辦法可以調整它們嗎?調整JPanels以改正大小

JPanel mainpanel = new JPanel(mainPanel,BoxLayout.Y_AXIS); 
JPanel tablepanel1 = new JPanel(); 
tablepanel1.setSize(900,400); 
JPanel selectionpanel = new JPanel(new GridBagLayout()); 
selectionpanel.setSize(900,100); 
JPanel tablepanel2 = new JPanel(); 
tablepanel2.setSize(900,400); 

mainpanel.add(tablepanel1); 
mainpanel.add(selectionpanel); 
mainpanel.add(tablepanel2); 

frame.add(mainpanel); 
frame.setSize(900,900); 
+0

如果你想在Swing中進行絕對定位,我會說你不能使用'mainPanel'的佈局管理器:http://docs.oracle.com/javase/tutorial/uiswing/layout/none.html – millimoose 2013-02-27 12:48:25

+0

使用'setPreferredSize'而不是'setSize'。另外,'BorderLayout'沒有一個名爲'Y_AXIS'的成員 - 也許你的意思是'BoxLayout'? – 2013-02-27 12:52:33

回答

1

您是不是要找使用BoxLayoutmainpanel

JPanel mainpanel = new JPanel(); 
mainpanel.setLayout(new BoxLayout(mainpanel, BoxLayout.Y_AXIS)); 

此佈局管理器只聽首選大小而不是組件尺寸。最好的辦法是重寫getPreferredSize

JPanel selectionpanel = new JPanel() { 
    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(900, 400); 
    } 
}; 

而且最好使用JFrame#pack而不是幀設定的尺寸。

+0

對不起,是的,它是boxLayout,但我嘗試使用你建議的方法,但沒有改變。我需要將大小設置爲jframe,因爲首先框架將與菜單欄一起爲空,並且一旦選擇了動作,面板將被添加並且框架不增加其大小。 – vijay 2013-02-27 14:21:03

+0

我測試了這個&它的作品。你是否覆蓋了3個面板的'getPreferredSize':'tablepanel1','tablepanel2'和'selectionpanel'? – Reimeus 2013-02-27 21:50:23