Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing:与标签相比的复选框间距_Java_Swing_Checkbox_Label_Spacing - Fatal编程技术网

Java Swing:与标签相比的复选框间距

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

如何使用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);
    }
}

有许多方法可以实现这一点,在中有详细说明

可以指定轴网或构件之间的间距。您可能希望执行以下操作:

     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() );
复选框具有非零的插入。这将来自边框。因此您应该能够:

  • 将复选框的边框设置为null
  • 将清空订单添加到标签

  • 它仍然不起作用。也许它不是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() );