web-dev-qa-db-ja.com

文字列をクリアする方法は?

私が取り組んでいるプログラムでは、テキストフィールドはある時点でテキストを表示する必要があります。

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

出力はJTextFieldです。これらのコード行はメソッド内にあり、最初に呼び出されたときは完全に正常に機能します。ただし、別のときに呼び出されても、元のoutputStringテキストは残ります。なぜこれが発生するのですか、どうすれば修正できますか?

さて、文字列は不変であるために起こると思います。重要なのは、outputStringは変更されないため、最初のメソッド呼び出しからのテキストが残っているということです。

どういうわけか、文字列のテキストを変更するにはどうすればよいですか?

6
kullalok

テキストを変数の内容に設定しても、その変数とそのテキストフィールドの間に永続的な関係は設定されません。テキストをクリアする場合は、次を使用できます。

output.setText("");
5

JTextFieldオブジェクトからテキストをクリアする必要があります。 setText()を使用して変数を引数として送信しても、その変数はオブジェクトに関連付けられません。文字列をコピーするだけです。

output.setText("");

テキストがnullまたは空の場合、古いテキストを単に削除する効果があります。

http://docs.Oracle.com/javase/6/docs/api/javax/swing/text/JTextComponent.html#setText%28Java.lang.String%29

4
Chris Dargis

あなたは非常に重要なことを誤解していると思います。 Java文字列は不変です。つまり、文字列を変更することはできません。

"どうすれば文字列のテキストを変更できますか?"

できません。文字列内のテキストは変更できません。それは不変です。文字列内のテキストの変更を伴う「解決策」は、Javaでは機能しません。 (わかった?)

これを行うとき:

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

割り当てによって、テキストフィールドに表示される値は変更されません。ローカル変数outputStringが参照する文字列を変更するだけです。

そして、あなたがこれをするとき:

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

outputStringは変更されません。表示されたテキストを何も変更せず、すぐにoutputStringが現在参照しているものに変更します。

テキストフィールドに表示される値を何も変更しない場合は、次のようにします。

output.setText("");

おそらくあなたがあなたの考えで間違っている他のことはあなたがこれを考えるということです:

output.setText(outputString);

テキストフィールドoutputと変数outputString ...の間に関係を設定し、ユーザーがフィールドに入力すると、outputString変数が魔法のように更新されるようにします。そうではありません。実際、変数のアドレスを渡すことができないため、そうすることはできません。

実際、output.setText(outputString);は、outputStringvalueをテキストボックスオブジェクトに渡すだけです。ユーザーがボックスに何かを入力すると、文字は別の場所に保存され、コードにのみ返されます... 新しい文字列として ...コードがoutput.getText()を呼び出したとき。

2
Stephen C

なぜこれが起こるのですか?

文字列は不変です。

文字列への新しい参照は常にあります。したがって、_outputString = "";_を呼び出すと、新しい文字列が作成されます。

どうすれば修正できますか?

output.setText("");を呼び出します。

1
JMelnik

コードが実行しているのは、最初にテキストフィールドの内容をoutput.setText( outputString );のoutputString変数の内容に設定することです。

後続のコード行は、テキストフィールドのコンテンツであるStringオブジェクトを変更しませんが、空の文字列変数を参照するようにoutputString変数を設定します。文字列はJavaで不変であるため、ある文字列変数への変更を別の文字列変数に反映させることはできません。

多くの人が述べているように、jTextFieldVar.setText("");またはjTextFieldVar.setText(null);を呼び出してテキストフィールドの内容を設定する必要があります。

1
Kallja
output.setText("");

この問題を解決します

1

文字列が不変であるという事実を示す他の回答は正確です。

ただし、「文字列をクリアする」機能が必要な場合は、 代わりにStringBufferを使用して、これを呼び出す

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

私はあなたが探しているものは次のとおりだと思います:

 output.setText("");
0
DP Greveling

これはうまくいくでしょう。

output.setString( "");

0
Djkgotso

JTextFieldのテキストを設定しようとした後、出力文字列を「」に設定していますか?もしそうなら、あなたはこのようなことをしようとするべきです:

  output.setText("");
0
Logard