2011-10-03 99 views
0

我有两个JPanel,我想在另一个JPanel中放置一个JPanel。 “panel_controls”重写.getPreferredSize()。代码:Java BoxLayout给出不正确的结果

public final class GUIPanelMain extends JPanel { 
    //... 

    private JPanel panel_images; 
    private JPanel panel_controls; 

    //... 

    private void addPanels() { 
     new BoxLayout(this,BoxLayout.Y_AXIS); //Bleh! Still is horizontal! 
     this.add(panel_images); 
     this.add(panel_controls); 
    } 

    //... 
} 

不幸的是,无论如何布局是水平设置的。只有当我调整JPanel的大小时,组件才会进入正确的位置(在这种情况下,垂直方向)。

我读的文档中的以下内容:“的BoxLayout尝试使所有组件一样宽,最宽的成分列如果失败,它对齐它们水平,与其X路线。”

什么失败的条件,然后呢?我如何强制它垂直对齐?

感谢,

+2

您不应该重写“panel_controls”的首选大小。如果您正确使用布局管理器,布局管理器将确定首选大小。 – camickr

回答

3

尝试

this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 

你基本上创建的BoxLayout的新实例,最后都用不上和未引用。

+0

您不需要将'this'放在方法调用之前。它不表示任何东西。 –

+0

@SteveKuo OP对其他呼叫有'this'。有时为了清晰起见,添加了它。 –

+0

+1,如果你没有专门设置布局管理器,那么JPanel将使用FlowLayout。 – camickr