2016-11-06 29 views
0

我刚开始使用MigLayout。MigLayout包装两行

我已经阅读了一些文档,包括MigLayout的快速入门指南,以及搜索一些SO问题,但我没有找到答案。我确定这是明显的,但就像我说的,这是我第一次使用这个布局管理器。

我正在尝试使我的MigLayout中的其中一行高出其他两倍。

我的代码开始是:

public GameWindow() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLayout(new MigLayout("fill")); 
    add(new PanelHud(), "grow, span 2, wrap"); 
    add(new PanelWorldView(), "grow"); 
    add(new PanelDetailView(), "grow, wrap"); 
    add(new PanelMenu(), "grow, span 2"); 
    pack(); 
    setVisible(true); 
} 

主要生产:

enter image description here

这是一个良好的开端,但我想要的是中间一排是两个时代一样高顶部和底部的行。起初,我以为我可以只让中间的要素跨两行,但没有奏效:

public GameWindow() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLayout(new MigLayout("fill")); 
    add(new PanelHud(), "grow, span 2, wrap"); 
    add(new PanelWorldView(), "grow, span 1 2"); 
    add(new PanelDetailView(), "grow, span 1 2, wrap"); 
    add(new PanelMenu(), "grow, span 2"); 
    pack(); 
    setVisible(true); 
} 

enter image description here

它看起来像中间行确实是正确的尺寸,但底部行流离失所。我怎样才能解决这个问题?

回答

1

3个可能的解决方案(我可能会有点过度)。

使用自动换行,以便miglayout检测全行本身:

setLayout(new MigLayout("fill, wrap 2")); 
add(new PanelHud(), "grow, span 2"); 
add(new PanelWorldView(), "grow, span 1 2"); 
add(new PanelDetailView(), "grow, span 1 2"); 
add(new PanelMenu(), "grow, span 2"); 

基地,你的布局对细胞:

setLayout(new MigLayout("fill", "[][]", "[][][][]")); 
add(new PanelHud(), "grow, cell 0 0 2 1"); 
add(new PanelWorldView(), "grow, cell 0 1 1 2"); 
add(new PanelDetailView(), "grow, cell 1 1 1 2"); 
add(new PanelMenu(), "grow, cell 0 3 2 1"); 

使用成长重量(虽然这似乎并没有保持2:1的比例对于小窗户尺寸):

setLayout(new MigLayout("fill", "[][]", "[grow 100][grow 200][grow 100]")); 
add(new PanelHud(), "grow, span 2, wrap"); 
add(new PanelWorldView(), "grow"); 
add(new PanelDetailView(), "grow, wrap"); 
add(new PanelMenu(), "grow, span 2");