wrap 3
split, span
.
panel.add(new JLabel("Name:"), "gapbottom 11, gaptop 11, split 2");
panel.add(d_msrField, "span 2");
给你
split
第一个单元格(这实际上使该单元格成为网格中的一个子行),然后尝试
span
当您添加时
d_msrField
. 问题是
d_msrField公司
已是此中的最后一个单元格
sub row
实际上,您需要做的是跨越
子行
panel.add(new JLabel("Name:"), "gapbottom 11, gaptop 11, split, span");
您对JSepator也有同样的问题。
如果你应用这个分裂的原则,然后跨越第一个单元格,你所拥有的就会如预期的那样工作。
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
public class Test {
public static void main(String[] args)
{
JFrame frame = new JFrame("Snack Selection");
JTextField d_msrField = new JTextField("Jane Doe");
d_msrField.setEnabled(false);
d_msrField.setColumns(30);
JPanel panel = new JPanel(new MigLayout("wrap 2", "[]15[grow]"));
panel.add(new JLabel("Name:"), "gapbottom 11, gaptop 11, split, span");
panel.add(d_msrField, "wrap");
panel.add(new JRadioButton("Choose a Fruit"), "wrap, span");
panel.add(new JCheckBox("Apple"), "gapleft 18");
panel.add(new JCheckBox("Orange"));
panel.add(new JCheckBox("Pear"), "gapleft 18");
panel.add(new JCheckBox("Banana"));
panel.add(new JRadioButton("Choose a Vegetable"), "span, wrap");
panel.add(new JCheckBox("Celery"), "gapleft 18");
panel.add(new JCheckBox("Carrot"));
panel.add(new JRadioButton("Choose a Dairy Item"), "span, wrap");
panel.add(new JCheckBox("Milk"), "gapleft 18");
panel.add(new JCheckBox("Cheese"));
panel.add(new JLabel("Options"), "split, span");
panel.add(new JSeparator(), "gaptop 4, growx, wrap");
JTextArea ta = new JTextArea(5, 30);
JScrollPane opts = new JScrollPane(ta);
panel.add(opts, "gapleft 18, span, growx");
frame.add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
子行可能是正确的术语,也可能不是正确的术语,但这是一个描述性的术语,我试图帮助回答这个问题