【问题标题】:MigLayout usageMigLayout 使用
【发布时间】:2011-01-04 10:13:49
【问题描述】:

熟悉MigLayout的人的问题

抱歉,我想不出一个更合适的名字来回答这个问题……

我正在尝试创建一个最终如下所示的布局:

+---------+---------+
|  btn1   |  btn2   |
+---------+---------+
|                   |
|       btn3        |
|                   |
+-------------------+

当调整窗口大小时,组件 btn1 和 btn2 应填充 x 轴(各一半),组件 btn3 应填充 x 轴和 y 轴上的所有可用空间。

您将如何实现这一目标?

下面是一些代码:

public static void main(String[] args)
{
    JFrame window = new JFrame();
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container cp = window.getContentPane();

    cp.setLayout(new MigLayout(""));
    cp.add(new JButton("btn1"), "");
    cp.add(new JButton("btn2"), "");
    cp.add(new JButton("btn3"), "");

    window.pack();
    window.setVisible(true);
}

【问题讨论】:

  • 如果您不熟悉 MigLayout,请在回答之前测试您的代码。 (这是更好的约阿希姆吗?)

标签: java swing miglayout


【解决方案1】:

这在 MigLayout 中非常简单:

setLayout(new MigLayout("fill"));

add(new JButton("button 1"), "w 50%");
add(new JButton("button 2"), "w 50%, wrap");
add(new JButton("button 3"), "grow, push, span");

如果您阅读 pstanton 的原始问题,我认为所需的布局说明与他的表述方式非常接近。这就是我喜欢 MigLayout 的原因:)

【讨论】:

  • 非常聪明 - 以前不知道 w 50%。谢谢。
【解决方案2】:

我从未使用过 miglayout,但它应该类似于以下内容:

...
cp.add(new JButton("btn1"));
cp.add(new JButton("btn2"), "wrap");
cp.add(new JButton("btn3"), "span");
...

【讨论】:

  • 不知道为什么这被否决但它看起来是一个正确的方法。查看文档,您还需要将其添加到构造函数中: new MigLayout("", "[grow][grow]", "");
  • 投了反对票,因为它没有回答问题。如果您没有测试答案并且不知道它有效,为什么要投票?!
  • 朝圣者,即使有您的建议 btn1 和 btn2 也不要水平缩放,btn3 也不会水平或垂直缩放。
【解决方案3】:

那么你想要这样的东西吗:

Swing Layout Demo 有它,在“流向”下

这是该示例的代码:

JTabbedPane tabbedPane = new JTabbedPane();

tabbedPane.addTab("Layout: flowx, Cell: flowx", createFlowPanel("", "flowx"));
tabbedPane.addTab("Layout: flowx, Cell: flowy", createFlowPanel("", "flowy"));
tabbedPane.addTab("Layout: flowy, Cell: flowx", createFlowPanel("flowy", "flowx"));
tabbedPane.addTab("Layout: flowy, Cell: flowy", createFlowPanel("flowy", "flowy"));

public JPanel createFlowPanel(String gridFlow, String cellFlow) {
    MigLayout lm = new MigLayout("center, wrap 3," + gridFlow,
                                 "[110,fill]",
                                 "[110,fill]");

    JPanel panel = createTabPanel(lm);

    for (int i = 0; i < 9; i++) {
        JButton b = createButton("" + (i + 1));
        b.setFont(b.getFont().deriveFont(20f));
        panel.add(b, cellFlow);
    }

    JButton b = createButton("5:2");
    b.setFont(b.getFont().deriveFont(20f));
    panel.add(b, cellFlow + ",cell 1 1");

    return panel;
}

【讨论】:

  • 哦,我还不能发布图片,只需删除参考中的那个空间就可以看到它。
  • 是的,仍然不是我在说什么,而且您发布的代码不完整,无法证明我在问什么。
猜你喜欢
  • 1970-01-01
  • 2020-08-13
  • 2015-10-14
  • 1970-01-01
  • 2013-07-15
  • 2012-10-27
  • 1970-01-01
  • 2012-03-04
  • 2018-09-27
相关资源
最近更新 更多