Java Swing:与标签相比的复选框间距
如何使用MigLayout删除/减少复选框之间的间距Java Swing:与标签相比的复选框间距,java,swing,checkbox,label,spacing,Java,Swing,Checkbox,Label,Spacing,如何使用MigLayout删除/减少复选框之间的间距 注意:我想知道这个问题的布局部分是不是在转移注意力。如果我将程序更改为以下内容,则会出现以下对话框: 您将注意到标签和复选框之间的间距差异。如何消除复选框的多余间距 import java.awt.Component; import java.util.Arrays; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; i
注意:我想知道这个问题的布局部分是不是在转移注意力。如果我将程序更改为以下内容,则会出现以下对话框: 您将注意到标签和复选框之间的间距差异。如何消除复选框的多余间距
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);
}
}
有许多方法可以实现这一点,在中有详细说明 可以指定轴网或构件之间的间距。您可能希望执行以下操作:
new MigLayout(
"", //layout
"[]", //column
"5" //row
);
这应该会填补空白。你必须玩数字游戏,直到你得到你想要的
第二个选择(我认为你有更多的控制权)是这样做:
panel.add(cb, "wrap 0");
其中0指定行之间的间距。差异在于每个组件的首选大小
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() );
复选框具有非零的插入。这将来自边框。因此您应该能够:
它仍然不起作用。也许它不是miglayout的东西,也许它是复选框的东西:如果我使用你的建议将行间距增加到100,我会得到更多的间距。但是如果我将行间距更改为0,我会得到更多或更少的我开始使用的间距,并且有我不想要的额外间距。如果我使用“wrap-3”然后它看起来差不多正确,但使用小于0的数字有点可疑。@Jason s您可能想看看组件间隙。您有几个选项,例如gaptop、gapleft等,可以指定组件离边缘的距离。谢谢!我终于有时间尝试了,并将复选框设置为null减少了空值空间。看起来焦点矩形需要一点空间才能正确渲染,所以我做了
cb.setBorder(new EmptyBorder(new Insets(1,1,1,1));
,这似乎是一个很好的折衷方案。
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() );