2011-01-12 46 views
5

你怎么删除/减少复选框 之间的间距与MigLayout 作为?摇摆:复选框间距相对于标签

alt text

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部分是红鲱鱼。如果我改变我的计划,下面,我得到这些对话框:

alt textalt text

你会注意到在标签和复选框之间的间距的差异。我怎样才能摆脱复选框的多余空间?

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); 
    } 
} 

回答

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. 设置检查框的边框为null
  2. 一个EmptyBorder添加到标签
1

有多种方式来实现这一点,他们在this document明确的规定。

可以指定间隔或者网格或组件之间。你可能想要做这样的事情:

 new MigLayout(
       "", //layout 
       "[]", //column 
       "5" //row 
     ); 

而这应该设置差距。你将不得不玩数字,直到你得到你想要的。

第二个选项(我认为你有更多的控制这种方式来做到这一点。

panel.add(cb, "wrap 0"); 

凡0指定行之间的差距

+0

它仍然无法正常工作。也许这不是一个miglayout的事情,也许这是一个复选框的事情,而不是:我用你的建议,以增加行间距100,我得到更多的空间。但是,如果我将行间距改为0,那么我得到的或多或少都是我开始的,而且我不想要额外的间距。 – 2011-01-12 15:56:23

+0

如果我使用“包-3”,那么它看起来正确的,但有可疑之处使用数量小于0 – 2011-01-12 15:59:13