我刚刚开始使用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);
}


产生:

java - MigLayout换行两行-LMLPHP

这是一个好的开始,但是我想要的是中间行的高度是顶部和底部行的两倍。起初我以为我可以让中间元素跨两行,但是那行不通:

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);
}


java - MigLayout换行两行-LMLPHP

看起来中间的行确实是正确的大小,但底部的行已移位。我怎样才能解决这个问题?

最佳答案

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");

关于java - MigLayout换行两行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40453184/

10-10 04:27