如何删除/缩小复选框与MigLayout 之间的间距?
import java.util.Arrays;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
public class CheckboxSpacing {
public static void main(String[] args) {
JFrame frame = new JFrame("checkbox spacing");
JPanel panel = new JPanel();
frame.setContentPane(panel);
panel.setLayout(new MigLayout());
for (String verb : Arrays.asList("see","hear","speak"))
{
JCheckBox cb = new JCheckBox(verb+" no evil");
panel.add(cb, "wrap");
}
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
注意:我想知道这个问题的MigLayout部分是否是红鲱鱼。如果我将程序更改为以下内容,则会显示以下对话框:
您将注意标签和复选框之间的间距差异。如何摆脱复选框的多余间距?
import java.awt.Component;
import java.util.Arrays;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
public class CheckboxSpacing {
enum WhichGUI { LABEL {
@Override
public Component createComponent(String text) {
return new JLabel(text);
}
}, CHECKBOX {
@Override
public Component createComponent(String text) {
return new JCheckBox(text);
}
};
abstract public Component createComponent(String text);
}
public static void main(String[] args) {
doit(WhichGUI.LABEL);
doit(WhichGUI.CHECKBOX);
}
private static void doit(WhichGUI which) {
JFrame frame = new JFrame("spacing: "+which);
JPanel panel = new JPanel();
frame.setContentPane(panel);
panel.setLayout(new MigLayout(
"", //layout
"[]", //column
"0" //row
));
for (String verb : Arrays.asList("see","hear","speak"))
{
Component c = which.createComponent(
verb+" no evil (Jabberwocky! Çgpq)");
panel.add(c, "wrap 0");
}
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
答案 0 :(得分:5)
不同之处在于每个组件的首选大小。
String text = "Hear no evil";
JLabel label = new JLabel(text);
System.out.println( label.getPreferredSize() );
System.out.println( label.getInsets() );
JCheckBox checkBox = new JCheckBox(text);
System.out.println( checkBox.getPreferredSize() );
System.out.println( checkBox.getInsets() );
复选框具有非零插入。这将来自边境。所以你应该能够:
答案 1 :(得分:1)
有很多方法可以实现这一点,并在this document中明确指出。
您可以指定网格或组件之间的间距。你可能想做这样的事情:
new MigLayout(
"", //layout
"[]", //column
"5" //row
);
这应该会产生差距。你必须玩这些数字,直到得到你想要的东西。
第二种选择(我认为你有更多的控制方法就是这样做:
panel.add(cb, "wrap 0");
其中0指定行之间的间隙。