2012-06-19 17 views
5

En un programa en el que estoy trabajando, un campo de texto tiene que mostrar texto en algún momento.¿Cómo borrar una cadena?

output.setText(outputString); 
outputString = ""; 

salida es un JTextField. Estas líneas de código están en un método, y cuando se llama la primera vez, funciona perfectamente bien. Sin embargo, cuando se llama en otro momento, el texto original outputString aún permanece. ¿Por qué sucede esto y cómo puedo solucionarlo?

De acuerdo, creo que sucede porque las cadenas son inmutables. El asunto es que outputString nunca cambia, por lo que todavía tiene el texto de la llamada al método inicial.

¿Cómo puedo, de alguna manera, cambiar el texto de la cadena?

+0

Bueno chicos, he intentado que la misma respuesta que me fue dado 5 veces. No funciona Puse output.setText (""); inmediatamente antes de output.setText (outputString) ;, pero outputString no cambia, por lo que aún contiene el fragmento anterior de texto. – kullalok

+0

código de publicación completo ... –

+0

"inmediatamente antes de output.setText (outputString)". Por supuesto, eso no borrará el texto, solo lo sobrescribes. Si desea que se borre el texto, debe llamar a setText ("") DESPUÉS. –

Respuesta

5

Ajustar el texto al contenido de la variable no establece una relación permanente entre esa variable y que el campo de texto, si desea borrar el texto, se puede usar

output.setText(""); 
0

¿Está configurando la salida de salida en "" después de intentar establecer el texto de JTextField? Si es así usted debe tratar de hacer algo como esto:

output.setText(""); 
0
output.setText(""); 

va a resolver este problema

1

¿Por qué sucede esto?

String son inmutables.

Siempre hay una nueva referencia a la Cadena. Por lo tanto, cuando llama al outputString = "";, se crea la nueva Cadena.

¿Cómo puedo repararlo?

Llamada output.setText("");.

1

Lo que está haciendo su código, primero es establecer los contenidos del campo de texto a los contenidos de su variable outputString en: output.setText(outputString);.

Su línea de código subsiguiente no cambia el objeto String, que es el contenido de su campo de texto, sino que establece su variable outputString para hacer referencia a la variable de cadena vacía. Las cadenas son inmutables en Java, es imposible que los cambios a una variable de cadena reflejen a otra.

Como han indicado varias personas, debe configurar los contenidos de los campos de texto llamando al: jTextFieldVar.setText(""); o jTextFieldVar.setText(null);.

0

Creo que lo que busca es:

output.setText(""); 
2

Creo que estás malinterpretando algo muy importante. Las cadenas de Java son inmutables, lo que significa que no puede cambiarlas.

"¿Cómo puedo, de alguna manera, cambiar el texto de la cadena?"

No puede. El texto en la cadena no se puede cambiar. Es inmutable Cualquier "solución" que implique cambiar el texto en una Cadena NO FUNCIONARÁ en Java. (Entendido?)

Al hacer esto:

output.setText(outputString); 
outputString = ""; 

la asignación no cambia el valor que se muestra en el campo de texto. Simplemente cambia la cadena a la que se refiere la variable local outputString.

Y cuando se hace esto:

output.setText(""); 
output.setText(outputString); 

que no causa outputString a cambiar. Simplemente cambia el texto mostrado a nada y luego lo cambia inmediatamente a lo que outputString se refiere actualmente.

Si desea cambiar el valor mostrado en el campo de texto para nada, que acaba de hacer esto:

output.setText(""); 

Tal vez la otra cosa que tienes mal en su forma de pensar es que usted piensa que esta :

output.setText(outputString); 

establece una relación entre el campo de texto output y la variable outputString ... de forma que cuando el usuario escribe en el campo, la variable outputString se actualiza mágicamente. Eso NO es así. De hecho, NO PUEDE ser así, porque no puede pasar la dirección de la variable.

De hecho, output.setText(outputString); acaba de pasar el valor de outputString al objeto de cuadro de texto. Si y cuando el usuario escribe algo en el cuadro, los caracteres se almacenan en otro lugar, y solo se devuelve a su código ... como una nueva Cadena ... cuando su código llame al output.getText().

0

esto funcionará muy bien.

output.setString ("");

0

Otras respuestas que apuntan al hecho de que las cadenas son inmutables son precisas.

Pero si usted quiere tener la funcionalidad de "limpieza de una cadena", se puede use a StringBuffer instead and call this on it:

stringBuffer.delete(0, stringBuffer.length());