2011-01-12 43 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