2012-05-08 16 views
6

Ho un JTextField e voglio impostareMargin. Ma quando ho impostato un bordo, non funziona correttamente. La sua funzione di margine non funziona. Questo è il mio codice;JTextField margine non funziona con il bordo

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

Se ho comandato questa linea, funziona

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

Amo questo coso Border Compound, quando si tratta di impostazioni frontiere, dal momento che è possibile specificare una frontiera vuoto con esso e dà quasi la stessa impressione l'impostazione propria margin thingy :-) –

risposta

5

leggerlo dal JavaDoc.

Imposta lo spazio di margine tra il bordo del componente di testo e il suo testo. L'oggetto Border predefinito del componente di testo utilizzerà questo valore per creare il margine corretto. Tuttavia, se sul componente di testo è impostato un bordo non predefinito, è responsabilità dell'oggetto Border quello di creare lo spazio margine appropriato (altrimenti questa proprietà verrà effettivamente ignorata). Ciò causa un ridisegno del componente. Un evento PropertyChange ("margin") viene inviato a tutti i listener.

Probabilmente si sta cercando un bordo composto:

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

Margine avete qualche problema con la frontiera, per aggirare il problema, è possibile provare a utilizzare un CompoundBorder l'impostazione di un EmptyBorder come confine interno e il bordo desiderato (lineBorder nel tuo caso) come bordo esterno.

Qualcosa del genere dovrebbe funzionare:

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

ottimo. Funziona. grazie mille tutte le risposte – querman

Problemi correlati