我有一个 MigLayout,我想动态添加组件,同时在框架底部保留两个按钮(因为这很直观)。
首先,我想知道我目前正在做的事情是否是最好的方法,其次是如何让我想做的事情真正发挥作用。
目前,我正在使用 MigLayout 的“网格”来定位动态添加的组件,然后使用 MigLayout 的“边框”来定位固定组件,但我无法让两个按钮都坐在旁边的南边框上另一个。
根据 Quickstart PDF,这应该是可能的(我引用,“你不限于每边只使用一个组件”),但它没有继续说明你是如何实现这一点的。
我有一个 MigLayout,我想动态添加组件,同时在框架底部保留两个按钮(因为这很直观)。
首先,我想知道我目前正在做的事情是否是最好的方法,其次是如何让我想做的事情真正发挥作用。
目前,我正在使用 MigLayout 的“网格”来定位动态添加的组件,然后使用 MigLayout 的“边框”来定位固定组件,但我无法让两个按钮都坐在旁边的南边框上另一个。
根据 Quickstart PDF,这应该是可能的(我引用,“你不限于每边只使用一个组件”),但它没有继续说明你是如何实现这一点的。
就我个人而言,我宁愿将我的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);
}
我是这样做的:
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");
这实际上只是我网格的最后一行,但关键似乎是使用span
和split
(sg
只是对按钮的大小进行分组,并将tag
它们定位 - 可爱的功能)。我在这里找到了示例(搜索“按钮栏”)。