有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java MigLayout换行两行

我刚开始使用MigLayout

我阅读了一些文档,包括MigLayout的快速入门指南,并搜索了一些SO问题,但没有找到答案。我相信这是显而易见的,但就像我说的,这是我第一次和这个布局经理在一起

我试图使我的布局中的一行比其他行高一倍

我的代码一开始是:

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) 个答案

  1. # 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");