2013-02-27 43 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