2011-01-12 9 views
5

Come si rimuove/riduce la spaziatura tra le caselle di controllo con MigLayout ?Oscillazione: spaziatura casella di controllo rispetto alle etichette

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

NOTA: mi chiedo forse se la parte MigLayout di questa domanda è una falsa pista. Se cambio il mio programma al seguente, mi vengono queste finestre di dialogo:

alt textalt text

Noterete la differenza di spaziatura tra le etichette e caselle di controllo. Come posso liberarmi della spaziatura in eccesso per le checkbox?

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

risposta

5

La differenza è nel formato preferito di .. ogni componente

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

Una casella di controllo ha diverse da zero inserti Questo sarebbe dal confine Così si dovrebbe essere in grado, a:.

  1. impostare il bordo della casella di controllo su null
  2. aggiungere un EmptyBorder all'etichetta
+1

grazie! Finalmente ho avuto il tempo di provarlo e l'impostazione della casella di controllo su null ha ridotto lo spazio vuoto. Sembra che tu abbia bisogno di un po 'di spazio per il rendering del rettangolo di messa a fuoco, quindi ho fatto 'cb.setBorder (new EmptyBorder (new Insets (1,1,1,1)))' e questo sembra essere un buon compromesso . –

1

ci sono un certo numero di modi per ottenere questo e sono ben specificati in this document.

È possibile specificare la spaziatura tra la griglia oi componenti. Probabilmente si vuole fare qualcosa di simile:

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

e che dovrebbe impostare le lacune. Dovrai giocare con i numeri fino a ottenere quello che vuoi.

Una seconda opzione (e penso che avere più controlli questo modo è quello di fare questo:.

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

Qualora il 0 specifica la distanza tra le righe

+0

Ancora non funziona. Forse non è una cosa da miglayout, forse è invece una cosa a scatola di controllo: se uso il tuo suggerimento per aumentare la spaziatura delle righe a 100, ottengo più spazio. Ma se cambio la spaziatura delle righe a 0, ottengo più o meno quello che ho iniziato, e non c'è spazio extra che non voglio. –

+0

Se uso "wrap -3", allora sembra giusto, ma c'è qualcosa di strano nell'usare un numero inferiore a 0. –

+0

@Jason S Puoi dare un'occhiata al gap del componente. Avete diverse opzioni come gaptop, gapleft ecc per specificare quanto lontano il componente è lontano dal bordo. –

Problemi correlati