【问题标题】:MiGLayout multiple components on border边框上的 MiGLayout 多个组件
【发布时间】:2012-09-23 22:14:40
【问题描述】:

我有一个 MigLayout,我想动态添加组件,同时在框架底部保留两个按钮(因为这很直观)。

首先,我想知道我目前正在做的事情是否是最好的方法,其次是如何让我正在尝试做的事情真正发挥作用。

目前,我正在使用 MigLayout 的“网格”来定位动态添加的组件,然后使用 MigLayout 的“边框”来定位固定组件,但我无法让两个按钮都位于南边边框彼此相邻。

根据快速入门 PDF,这应该是可能的(我引用,“你不限于每边只使用一个组件”)但它并没有继续说明 如何你做到了。

【问题讨论】:

  • 我看不出你做不到的任何原因,这只是一个 MigLayout 配置目的。请发布您的代码尝试,以便我们最终帮助您查看问题所在。但就个人而言,它不会那样做,请参阅下面的答案。

标签: java swing layout-manager miglayout


【解决方案1】:

就我个人而言,我宁愿将我的 JFrame 拆分为 2 个带有 BorderLayout 的 JPanel。将 MigLayout 表单放在 CENTER 区域的 JPanel 中,将按钮放在 SOUTH 区域的 Box 中。

编辑

举个例子就更好了;-)

public static void main(String[] args) {

    JFrame frame = new JFrame();
    frame.setLayout(new BorderLayout());

    // == MigLayout Form ==
    JPanel panelCenter = new JPanel();
    panelCenter.setLayout(
                new MigLayout(
                        new LC().wrapAfter(4),
                        new AC().size(":80:", 0).size("115:115:115", 1, 2, 3).align("right", 0, 2),
                        new AC().size("19:19:19")
                ));
    panelCenter.setOpaque(false);

    panelCenter.add(new JLabel("Label1"));
    panelCenter.add(new JTextField(), new CC().growX());
    panelCenter.add(new JLabel("Label2"));
    panelCenter.add(new JTextField(), new CC().growX());
    panelCenter.add(new JLabel("Label3"));
    panelCenter.add(new JTextField(), new CC().growX());
    panelCenter.add(new JLabel("Label4"));
    panelCenter.add(new JTextField(), new CC().growX());
    panelCenter.add(new JLabel("Label5"));
    panelCenter.add(new JTextField(), new CC().growX());
    panelCenter.add(new JLabel("Label6"));
    panelCenter.add(new JTextField(), new CC().growX());

    frame.add(panelCenter, BorderLayout.CENTER);

    // == Buttons ==
    Box southPanel = Box.createHorizontalBox();
    southPanel.add(Box.createHorizontalGlue());
    southPanel.add(new JButton("Ok"));
    southPanel.add(new JButton("Cancel"));
    southPanel.add(Box.createHorizontalGlue());
    frame.add(southPanel, BorderLayout.SOUTH);

    frame.setVisible(true);
    frame.setSize(500, 150);
}

【讨论】:

  • 谢谢,这就是我要做的(或多或少)。关于您的评论,我认为现阶段不需要代码示例,因为它更多的是设计/整体问题,而不是特定的代码相关问题。再次感谢!
  • 您正在混合 awt 和 swing(这在较新的 jdk 版本中是可能的,但通常不是您想要的 :-)
  • 欢迎提出您的版本。
  • huch .. 如果没有很好的理由,就不要混合(我怀疑,我的猜测是它是偶然发生的)顺便说一句:如果你没有理由使用 BoxLayout已经有 Mig 在车道上,它可以处理非常高水平的按钮栏(比如保持所有相同的大小,按照操作系统指南的建议处理它们的顺序..)
  • “没有任何理由使用 BoxLayout...”:这是 your 断言。相反,我认为将“动态部分”与“静态”按钮分开可能是一种很好的形式,因为有人解释说 Mig 表单是动态创建的。这就是为什么我说这就是我将如何实现它个人。我从未说过 Mig 布局无法管理按钮部分,我从未说过这是唯一的解决方案!阅读我的第一条评论...
【解决方案2】:

我是这样做的:

create = new JButton("Create");
create.addActionListener(this);
mainPanel.add(create, "tag ok, span, split 2, sg btn");

cancel = new JButton("Cancel");
cancel.addActionListener(this);
mainPanel.add(cancel, "tag cancel, sg btn");

这实际上只是我网格的最后一行,但关键似乎是使用 spansplitsg 只是对按钮的大小进行分组,tag 定位它们 - 可爱的功能) .我找到了示例here(搜索“按钮栏”)。

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 2013-04-25
    • 2011-10-21
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多