2012-06-19 32 views
5

In einem Programm, an dem ich gerade arbeite, muss ein Textfeld irgendwann Text anzeigen.Wie lösche ich eine Zeichenfolge?

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

Ausgabe ist ein JTextField. Diese Codezeilen sind in einer Methode, und wenn es das erste Mal aufgerufen wird, funktioniert es einwandfrei. Wenn es jedoch ein anderes Mal aufgerufen wird, bleibt der ursprüngliche outputString-Text erhalten. Warum passiert das und wie kann ich das beheben?

Okay, ich denke, es passiert, weil Strings unveränderlich sind. Die Sache ist, dass sich outputString nie ändert, also immer noch den Text vom initialen Methodenaufruf hat.

Wie ändere ich irgendwie den Text in der Zeichenfolge?

+0

Okay Leute, ich habe gerade versucht, dass gleiche Antwort, die 5-mal zu mir gegeben wurde. Es funktioniert nicht. Ich setzte output.setText (""); unmittelbar vor output.setText (outputString) ;, aber outputString ändert sich nicht, daher enthält es immer noch den früheren Textabschnitt. – kullalok

+0

schreiben Sie den vollen Code ... –

+0

"unmittelbar vor output.setText (outputString)". Natürlich würde das den Text nicht löschen, Sie überschreiben ihn nur. Wenn der Text gelöscht werden soll, müssen Sie setText ("") AFTER aufrufen. –

Antwort

5

Einstellen der Text den Inhalt Ihres Variable nicht eine dauerhafte Beziehung zwischen dieser Variable und diesem Textfeld einrichten, wenn Sie den Text löschen möchten, können Sie verwenden

output.setText(""); 
0

Setzen Sie den Ausgabestring auf "", nachdem Sie versuchen, den Text des JTextField festzulegen? Wenn dem so ist, sollten Sie versuchen, so etwas zu tun:

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

löst dieses Problem

1

Warum geschieht das?

Zeichenfolge sind unveränderlich.

Es gibt immer einen neuen Verweis auf den String. Wenn Sie also outputString = ""; aufrufen, wird der neue String erstellt.

Wie kann ich es beheben?

Anruf output.setText("");.

1

Was Ihr Code tut, setzt den Inhalt des Textfelds zuerst auf den Inhalt der Variablen outputString in: output.setText(outputString);.

Ihre nachfolgende Codezeile ändert nicht das String-Objekt, das den Inhalt Ihres Textfelds darstellt, sondern setzt Ihre outputString-Variable so, dass sie auf die leere String-Variable verweist. Da die Zeichenfolgen in Java unveränderlich sind, ist es unmöglich, Änderungen an einer Zeichenfolgenvariablen auf eine andere zurückzuführen.

Wie eine Reihe von Personen angegeben haben, müssen Sie den Inhalt Ihres Textfeldes einstellen: jTextFieldVar.setText(""); oder jTextFieldVar.setText(null);.

0

Ich denke, was Sie suchen ist:

output.setText(""); 
2

Ich glaube, Sie etwas sehr Wichtiges sind Missverständnis. Java-Zeichenfolgen sind unveränderlich, dh Sie können sie nicht ändern.

"Wie ändere ich irgendwie den Text in der Zeichenfolge?"

Sie können nicht. Der Text in der Zeichenfolge kann nicht geändert werden. Es ist unveränderlich. Jede "Lösung", bei der der Text in einem String geändert wird, funktioniert NICHT in Java. (Haben Sie das?)

Wenn Sie dies tun:

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

die Zuordnung nicht den Wert ändern, der in dem Textfeld angezeigt wird. Es ändert nur den String, auf den sich die lokale Variable outputString bezieht.

Und wenn Sie dies tun:

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

es verursacht keine outputString zu ändern. Es ändert nur den angezeigten Text in nichts und ändert dann sofort den Wert, auf den sich outputString gerade bezieht.

Wenn Sie den Wert in das Textfeld nichts angezeigt ändern, können Sie dies nur tun,:

output.setText(""); 

Vielleicht ist die andere Sache, die Sie in Ihrem Denken falsch verstanden habe ist, dass Sie denken, dass diese :

output.setText(outputString); 

stellt eine Beziehung zwischen dem Textfeld output und der Variable outputString ... so dass, wenn der Benutzer in das Feld, die outputString Variable auf magische Weise aktualisiert werden. Das ist nicht so. In der Tat kann es nicht so sein, weil Sie die Adresse der Variablen nicht übergeben können.

Tatsächlich übergibt output.setText(outputString); nur den Wert von outputString an das Textfeld Objekt. Wenn und wenn der Benutzer etwas in die Box eingibt, werden die Zeichen an anderer Stelle gespeichert und nur an Ihren Code zurückgegeben ... als neue Zeichenfolge ... wenn Ihr Code output.getText() aufruft.

0

das wird gut funktionieren.

output.setString ("");

0

Andere Antworten, die darauf hinweisen, dass Strings unveränderlich sind, sind korrekt.

Aber wenn Sie die Funktionalität von „Löschen eines String“ haben wollen, können Sie use a StringBuffer instead and call this on it:

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