2010-02-17 16 views
19

Esiste comunque la rimozione di un bordo in un JTextField?Swing JTextField come rimuovere il bordo?

txt = new JTextField(); 
txt.setBorder(null); // <-- this has no effect. 

mi vuole veramente farlo sembrare come un JLabel - ma ho ancora bisogno di essere un JTextField perché voglio persone a essere punto forte in grado di esso.

+0

sarebbe interessante sapere quale sistema/ambiente si sta utilizzando. O c'è più codice coinvolto ... È (ancora) funziona perfettamente per me. Vedi questa immagine con alcuni risultati (e codice): http: // img709.imageshack.us/img709/9034/fields.jpg –

risposta

17

Da una risposta al precedente question si sa che alcuni F PL & possono imbastire il bordo.

La soluzione ovvia è quindi ignorare il metodo setBorder che il PL & chiama e annullare la modifica.

JTextField text = new JTextField() { 
    @Override public void setBorder(Border border) { 
     // No! 
    } 
}; 
+0

@finnw: digitare "null" int tra parentesi. Non è necessario sostituirlo. – Ramses

+0

@ user3300710 Digitare 'null' dove? Come nella domanda originale, 'setBorder (null)' è inaffidabile (vale a dire quando lo provi da solo, funziona, ma potrebbe non funzionare sul campo, o in modo casuale qualche tempo dopo che sei passato ad altre cose). –

+0

@finnw: ok hai ragione. Non ho letto attentamente la domanda originale, mi dispiace. – Ramses

3

Provare a impostarlo su BorderFactory.createEmptyBorder() anziché su null. A volte questo "fa il trucco" perché impostarlo su null ha effettivamente un significato diverso.

Se ciò non funziona, è possibile che l'aspetto che si sta utilizzando stia sovrascrivendo qualcosa. Stai usando l'impostazione predefinita o qualcosa di personalizzato?

+3

@Markus, nella mia esperienza con Swing, i problemi con esso non sono spesso limitati a un problema, ma piuttosto devono essere sbucciati come una cipolla. senza vedere l'intero codice, non so se questo risolva completamente il problema. Se avessi a che fare con il bug, questa sarebbe la prima cosa che proverei. Se non funzionasse, proverei a indagare se il look-and-feel (se stai usando qualcosa di stravagante) sta interferendo. – Uri

52
JTextField textField = new JTextField(); 
textField.setBorder(javax.swing.BorderFactory.createEmptyBorder()); 

http://java.sun.com/javase/6/docs/api/javax/swing/BorderFactory.html

Quando si imposta il confine per 'nulla', si sta effettivamente dicendo l'aspetto & sentono di utilizzare lo stile del bordo nativo (del sistema operativo) se ce n'è uno.

+7

+1 per aver menzionato la ragione PERCHÉ null non funziona come previsto –

+0

dovrebbe essere -1. perché non funziona la soluzione che funziona è quella suggerita che dice: override setBorder per non fare nulla –

+2

Questo può o non può funzionare a seconda del contesto, per ragioni non ovvie. http://stackoverflow.com/questions/2281539/setborder-on-jtextfield-does-not-work-or-does-it Tuttavia, si tratta di una buona informazione e non vedo alcun motivo di downvoting. –

2

No, non è possibile rimuovere il bordo. Soprattutto sul display dei componenti AWT. Usano il set di widget nativi (sono disegnati all'esterno di Java).

cercare di rendere la linea che è simile al vostro sfondo ... per esempio se il vostro sfondo è bianco, allora si deve:

setBorder(BorderFactory.createLineBorder(Color.white)); 

Poi impostare lo sfondo bianco:

setBackground(Color.white); 
-1

l'unico modo per rendere funziona in tutte le circostanze è la seguente impostazione:

setBorder (BorderFactory.createLineBorder (new Color (0, 0, 0, 0), 2)); 

altrimenti (quando si avere lo sfondo nullo del contenitore genitore) vedrai il cursore "I" che rimane per sempre sul bordo sinistro del tuo JTextField. (Basta fare alcuni test per lo spessore del bordo diverso e osservare modo abbastanza strano il JTextField posiziona il cursore quando lo si attiva prima volta.)

In alternativa è possibile impostare:

setBorder (BorderFactory.createLineBorder (getBackground(), 2)); 

ma si otterrà il campo opticaly più grande di 2 pixel in tutte e quattro le direzioni. Se non si specifica lo spessore del bordo, verrà visualizzato il cursore TRA questo bordo e il campo rimanente per sempre.

Problemi correlati