ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-05-18 18:50:52  阅读:273  来源: 互联网

标签:java checkbox label swing spacing


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

解决方法:

不同之处在于每个组件的首选大小.

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
>将一个EmptyBorder添加到标签

标签:java,checkbox,label,swing,spacing
来源: https://codeday.me/bug/20190518/1129000.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有