MigLayout 确实是一位非常强大的经理。这可以实现
以多种方式。我提供了三种解决方案。
解决方案 1
我们在第 5 行和第 6 行之间设置了一个贪婪的间隙。
package com.zetcode;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
public class MigLayoutGapGrow extends JFrame {
public MigLayoutGapGrow() {
initUI();
setTitle("Gaps");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
private void initUI() {
setLayout(new MigLayout("wrap", "[grow, fill]", "[][][][][]20:push[]"));
add(new JTextField("a"+1));
add(new JTextField("a"+2));
add(new JTextField("a"+3));
add(new JTextField("a"+4));
add(new JTextField("a"+5));
final JLabel status = new JLabel("status line");
add(status);
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MigLayoutGapGrow ex = new MigLayoutGapGrow();
ex.setVisible(true);
}
});
}
}
解决方案 2
我们放大放置标签的最后一个单元格。那么标签就是
与底部对齐。
package com.zetcode;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
public class MigLayoutGapGrow2 extends JFrame {
public MigLayoutGapGrow2() {
initUI();
setTitle("Gaps");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
private void initUI() {
setLayout(new MigLayout("wrap, debug", "[grow, fill]"));
add(new JTextField("a"+1));
add(new JTextField("a"+2));
add(new JTextField("a"+3));
add(new JTextField("a"+4));
add(new JTextField("a"+5));
final JLabel status = new JLabel("status line");
add(status, "pushy, bottom");
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MigLayoutGapGrow2 ex = new MigLayoutGapGrow2();
ex.setVisible(true);
}
});
}
}
解决方案 3
标签使用相对定位附加到底部。相对的
定位似乎不适用于pack() 方法,这可能
是个问题。
package com.zetcode;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
public class MigLayoutGapGrow3 extends JFrame {
public MigLayoutGapGrow3() {
initUI();
setTitle("Gaps");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
private void initUI() {
setLayout(new MigLayout("wrap", "[grow, fill]"));
add(new JTextField("a"+1), "id a1");
add(new JTextField("a"+2));
add(new JTextField("a"+3));
add(new JTextField("a"+4));
add(new JTextField("a"+5));
final JLabel status = new JLabel("status line");
add(status, "pos a1.x visual.y2-p");
pack();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MigLayoutGapGrow3 ex = new MigLayoutGapGrow3();
ex.setVisible(true);
}
});
}
}