2010-02-17 31 views
19

¿Hay alguna forma de eliminar un borde en un JTextField?Swing JTextField cómo quitar el borde?

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

realmente me quiere que se vea como un JLabel - pero todavía necesita que sea un JTextField porque quiero que la gente sea capaz resaltarlo.

+0

sería interesante saber qué sistema/entorno está utilizando. O hay más código involucrado ... Esto (nuevamente) funciona perfectamente para mí. Vea esta imagen con algunos resultados (y código): http: // img709.imageshack.us/img709/9034/fields.jpg –

Respuesta

17

De una respuesta a su anterior question, sabe que algunos PL & Fs pueden taladrar el borde.

La solución obvia es, por lo tanto, anular el método setBorder que está llamando PL & F, y descartar el cambio.

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

@finnw: escriba 'null' entre los corchetes. No necesita anularlo. – Ramses

+0

@ user3300710 Escriba 'null' donde? Al igual que en la pregunta original, 'setBorder (nulo)' no es fiable (es decir, cuando se haga la prueba a ti mismo que funciona, pero no puede trabajar en el campo, o de forma aleatoria en algún momento más tarde después de que haya pasado a otras cosas). –

+0

@finnw: ok, tienes razón. No leí la pregunta original con cuidado, lo siento. – Ramses

3

Intente configurarlo en BorderFactory.createEmptyBorder() en lugar de null. A veces, esto "hace el truco" porque establecerlo en nulo en realidad tiene un significado diferente.

Si eso no funciona, es posible que el aspecto que está utilizando esté anulando algo. ¿Estás usando el predeterminado o algo personalizado?

+3

@Markus, en mi experiencia con el swing, los problemas con que a menudo no están limitados a un solo tema, sino que tienen que ser pelado como una cebolla. sin ver todo su código, no sé si esto resolvería completamente el problema. Si tuviera que lidiar con el error, esto sería lo primero que intentaría. Si no funcionó, yo trataba de investigar si el look-and-feel (si está usando algo de fantasía) está interfiriendo. – Uri

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

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

Al establecer la frontera para 'nulo', en realidad estás diciendo la mirada & sentir a utilizar el estilo de borde nativa (del sistema operativo), si es que existe.

+7

1 de mencionar la razón por la nula no funciona como se esperaba –

+0

debe ser -1. porque no funciona la solución que funciona es el que sugirió que dice: setBorder anulación para no hacer nada –

+2

Esto puede o no puede funcionar dependiendo del contexto, por razones no obvias. http://stackoverflow.com/questions/2281539/setborder-on-jtextfield-does-not-work-or-does-it Sin embargo, es una buena información y no veo ninguna razón para que downvoting. –

2

No, no se puede eliminar el borde. Especialmente sobre la visualización de los componentes AWT. Usan el conjunto de widgets nativo (se dibujan fuera de Java).

tratar de hacer que la línea que es similar a su fondo ... por ejemplo, si el fondo es blanco entonces usted tiene que:

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

A continuación, poner el fondo en blanco:

setBackground(Color.white); 
-1

la única manera de hacer que funciona en todas las circunstancias es la siguiente configuración:

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

lo contrario (cuando tiene el fondo nulo del contenedor principal) verá que el cursor "I" permanece para siempre en el borde izquierdo de su JTextField. (Basta con hacer algunas pruebas para diferentes espesores de frontera y observar de manera bastante extraña el JTextField coloca el cursor cuando se activa por primera vez.)

o también puede configurar:

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

pero obtendrá el campo opticaly más grande por 2 píxeles en las cuatro direcciones. Si no especifica el grosor del borde, verá el cursor ENTRE este borde y el campo restante para siempre.

1
txt.setBorder(new LineBorder(Color.BLACK,0)); 

podría funcionar.

Cuestiones relacionadas