2011-01-12 7 views
5

Jak usunąć/zmniejszyć odstępy między polami wyboru za pomocą MigLayout ?Swing: odstępy między polami wyboru w porównaniu do etykiet

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

UWAGA: Zastanawiam się, czy może MigLayout część to pytanie jest czerwony śledź. Jeśli zmienię mój program do następujących, otrzymuję te dialogi:

alt textalt text

Zauważysz różnicę w rozstawie etykiet i wyboru. Jak mogę pozbyć się nadmiaru odstępów dla pól wyboru?

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

Odpowiedz

5

Różnica jest w korzystnej wielkości .. każdy składnik

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

pole wyboru

ma niezerowe wypustki To byłoby od granicy, więc powinieneś być w stanie albo:.

  1. ustawiona granica pola wyboru null
  2. dodać EmptyBorder etykiety
+1

dzięki! W końcu miałem czas, aby to wypróbować, a ustawienie pola wyboru na wartość null zmniejszyło pustą przestrzeń. Wygląda na to, że potrzebujesz trochę miejsca na poprawne renderowanie prostokąta ostrości, więc zrobiłem cb.setBorder (nowy EmptyBorder (nowe wstawki (1,1,1,1)); i to wydaje się być dobrym kompromisem . –

1

Istnieje wiele sposobów, aby tego dokonać i są dobrze określone w this document.

Można określić odstępy między siatką lub komponentami. Prawdopodobnie chcesz zrobić coś takiego:

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

A to powinno ustalić luki. Będziesz musiał grać z liczbami, dopóki nie dostaniesz tego, czego chcesz.

Druga opcja (i myślę, że trzeba bardziej kontrolować w ten sposób jest to zrobić.

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

Jeżeli 0 określa odstęp między rzędami

+0

Nadal nie działa. Być może nie jest to sprawa typu "migdał", może jest to opcja typu checkbox: jeśli użyję twojej sugestii, aby zwiększyć odstęp między wierszami do 100, otrzymam więcej odstępów. Ale jeśli zmienię odstęp między wierszami na 0, otrzymam mniej więcej to, od czego zacząłem, i nie ma dodatkowych odstępów. –

+0

Jeśli używam "wrap -3", to wygląda na to, że jest w porządku, ale jest coś podejrzanego w użyciu liczby mniejszej niż 0. –

+0

@Jason S Możesz wtedy rzucić okiem na lukę komponentów. Masz kilka opcji, takich jak gaptop, gapleft itp., Aby określić odległość od krawędzi. –