8

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

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

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

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

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

4

10 に答える 10

5

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

output.setText("");
于 2012-06-19T13:38:36.460 に答える
4

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

output.setText("");

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

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

于 2012-06-19T13:36:59.130 に答える
2

あなたは非常に重要なことを誤解していると思います。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);渡すだけです。ユーザーがボックスに何かを入力すると、文字は別の場所に保存され、コードが.を呼び出したときに...新しい文字列として...コードにのみ返されます。outputStringoutput.getText()

于 2012-06-19T13:55:15.657 に答える
1

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

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

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

于 2012-06-19T13:42:37.613 に答える
1

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

文字列は不変です。

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

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

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

于 2012-06-19T13:40:01.923 に答える
1
output.setText("");

この問題を解決します

于 2012-06-19T13:39:53.863 に答える
0

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

 output.setText("");
于 2012-06-19T13:43:01.380 に答える
0

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

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

stringBuffer.delete(0, stringBuffer.length());
于 2014-05-23T17:58:29.360 に答える
0

これはうまくいきます。

output.setString("");

于 2012-06-19T14:40:10.637 に答える
0

JTextField のテキストを設定しようとした後、outputstring を "" に設定していますか? もしそうなら、あなたはこのようなことをしようとするべきです:

  output.setText("");
于 2012-06-19T13:39:06.950 に答える