MiGLayout边框上有多个组件

时间:2012-02-20 11:34:23

标签: java swing layout-manager miglayout

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

首先,我想知道我目前正在做的是最好的方法,其次是如何获得我想要做的实际工作。

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

根据快速入门PDF,这应该是可能的(我引用,“你并不局限于每面只使用一个组件”)但它不会继续说如何你实现了这个目标。

2 个答案:

答案 0 :(得分:3)

我个人宁愿用 BorderLayout 在2个JPanel中分割我的 JFrame 。将 MigLayout 表单放在CENTER区域的 JPanel 中,以及南区的 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);
}

答案 1 :(得分:0)

我是这样做的:

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只是按下按钮的大小,{{1定位他们 - 可爱的特征)。我找到了示例here(搜索“按钮栏”)。