2011-01-12 9 views
5

¿Cómo se elimina/reduce el espaciado entre las casillas de verificación con MigLayout ?Oscilación: espacio de casilla de verificación en comparación con las etiquetas

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: Me pregunto si tal vez la parte MigLayout de esta pregunta es una pista falsa. Si cambio de programa a la siguiente, consigo estos diálogos:

alt textalt text

se dará cuenta de la diferencia en la distancia entre las etiquetas y las casillas de verificación. ¿Cómo puedo eliminar el exceso de espacio para las casillas de verificación?

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

Respuesta

5

La diferencia está en el tamaño preferido de .. cada 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 casilla de verificación tiene distintos de cero inserciones Esto sería desde la frontera Por lo que debe ser capaz de, ya sea:.

  1. Establece el borde de la casilla de verificación en null
  2. añadir un EmptyBorder a la etiqueta
+1

gracias! Finalmente tuve tiempo de probarlo, y establecer la casilla de verificación para anular redujo el espacio vacío. Parece que necesita un poco de espacio para que el rectángulo de foco se reproduzca correctamente, así que hice 'cb.setBorder (nuevo EmptyBorder (nuevas Insets (1,1,1,1)));' y eso parece ser un buen compromiso . –

1

Hay varias maneras de lograr esto y ellos están bien especificados en this document.

Puede especificar el espaciado entre la grilla o los componentes. Probablemente desee hacer algo como esto:

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

Y eso debería establecer las lagunas. Tendrá que jugar con los números hasta que obtenga lo que quiere.

Una segunda opción (y creo que tiene más control de esta manera es hacer esto:.

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

Cuando el 0 especifica la distancia entre filas

+0

Todavía no funciona. Tal vez no sea una cuestión de migración, quizás sea una casilla de verificación: si uso su sugerencia para aumentar el espaciado entre filas a 100, obtengo más espacio. Pero si cambio el espaciado de fila a 0, obtengo más o menos lo que comencé, y no hay espacio adicional que no quiero. –

+0

Si uso "wrap -3", se ve bien, pero hay algo sospechoso en utilizar un número menor que 0. –

+0

@Jason S Es posible que desee echar un vistazo a la brecha del componente a continuación. Tiene varias opciones como gaptop, gapleft, etc. para especificar qué tan lejos está el componente del borde. –

Cuestiones relacionadas