2012-05-08 40 views
6

Tengo un JTextField y quiero establecerMargin. Pero cuando configuro cualquier borde, no funciona correctamente. Su función de margen no funciona. Este es mi código;Margen JTextField no funciona con el borde

import java.awt.Color; 
import java.awt.Insets; 
import java.io.IOException; 

import javax.swing.BorderFactory; 
import javax.swing.JOptionPane; 
import javax.swing.JTextField; 

public class ImageField { 

public static void main(String[] args) throws IOException { 

    JTextField textField = new JTextField(); 
    textField.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY)); 
    textField.setMargin(new Insets(0, 20, 0, 0)); 
    JOptionPane.showMessageDialog(null, textField, "", 
      JOptionPane.PLAIN_MESSAGE); 
    } 
} 

Si i commant esta línea, funciona

//textField.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY)); 
+0

Me encanta esta cosita Frontera compuesto, cuando se trata de la configuración de las fronteras, ya que se puede especificar una frontera vacía con ella y se da casi la misma impresión que el establecimiento de la propia margen cosita :-) –

Respuesta

5

leerlo desde el JavaDoc.

Define el espacio de margen entre el borde del componente de texto y su texto. El objeto de borde predeterminado del componente de texto usará este valor para crear el margen adecuado. Sin embargo, si se establece un borde no predeterminado en el componente de texto, es responsabilidad del objeto Border crear el espacio de margen apropiado (de lo contrario, esta propiedad se ignorará). Esto causa un redibujado del componente. Un evento PropertyChange ("margen") se envía a todos los oyentes.

Usted probablemente está buscando una frontera compuesto:

BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.DARK_GRAY), 
       BorderFactory.createEmptyBorder(0, 20, 0, 0)); 
15

Margen haya algún problema con la frontera, para evitar el problema, puede intentar usar un CompoundBorder establecer un EmptyBorder como borde interno y el borde deseado (lineBorder en su caso) como borde exterior.

Algo como esto debería funcionar:

Border line = BorderFactory.createLineBorder(Color.DARK_GRAY); 
Border empty = new EmptyBorder(0, 20, 0, 0); 
CompoundBorder border = new CompoundBorder(line, empty); 
textField.setBorder(border); 
+0

genial. funciona. muchas gracias todas las respuestas. – querman

Cuestiones relacionadas