在我正在编写的程序中,文本字段必须在某个时刻显示一些文本。
output.setText( outputString );
outputString = "";
输出是一个JTextField。这些代码行在一个方法中,当它第一次被调用时,它完全正常。但是,当它被另一个时间调用时,原始的outputString文本仍然存在。为什么会发生这种情况,我该如何解决?
好吧,我认为这是因为字符串是不可变的。问题是,outputString永远不会改变,因此它仍然具有初始方法调用的文本。
我如何以某种方式更改字符串中的文字?
答案 0 :(得分:5)
将文本设置为变量的内容不会在该变量与该文本字段之间建立永久关系,如果要清除文本,可以使用
output.setText("");
答案 1 :(得分:4)
您必须清除JTextField对象中的文本。使用setText()发送变量作为参数不会将该变量绑定到对象。它只是复制字符串。
output.setText("");
如果文本为null或为空,则具有简单删除的效果 旧文。
答案 2 :(得分:2)
我认为你误解了一些非常重要的东西。 Java字符串是不可变的,这意味着您无法更改它们。
“我怎么能以某种方式更改字符串中的文字?”
你做不到。字符串中的文本无法更改。这是不可改变的。涉及更改字符串中文本的任何“解决方案”都不适用于Java。 (知道吗?)
执行此操作时:
output.setText(outputString);
outputString = "";
分配不会更改文本字段中显示的值。它只是更改局部变量outputString
引用的String。
当你这样做时:
output.setText("");
output.setText(outputString);
它不会导致outputString
更改。它只是将显示的文本更改为空,然后立即将其更改为当前引用的outputString
。
如果要将文本字段中显示的值更改为空,则必须执行以下操作:
output.setText("");
也许你认为错误的另一件事是你认为这个:
output.setText(outputString);
在文本字段output
和变量outputString
之间建立关系...这样当用户输入字段时,outputString
变量就会神奇地更新。事实并非如此。事实上,它不可能是这样,因为你无法传递变量的地址。
事实上,output.setText(outputString);
只是将outputString
的值传递给文本框对象。如果用户在框中输入内容,则字符会存储在其他位置,并且只会返回到您的代码... 作为新字符串 ...当您的代码调用output.getText()
时
答案 3 :(得分:1)
为什么会这样?
字符串是不可变的。
始终有一个对String的新引用。因此,当您调用outputString = "";
时,将创建新的String。
我该如何解决?
致电output.setText("");
。
答案 4 :(得分:1)
您的代码正在做什么,首先将text字段的内容设置为output {_S}变量的内容:output.setText( outputString );
。
您的后续代码行不会更改String对象(即文本字段的内容),而是将outputString变量设置为引用空字符串变量。字符串在java中是不可变的,不可能将一个字符串变量的更改反映给另一个。
正如许多人所述,您需要致电:jTextFieldVar.setText("");
或jTextFieldVar.setText(null);
来设置文字字段内容。
答案 5 :(得分:0)
在尝试设置JTextField的文本后,是否将outputstring设置为“”?如果是这样,你应该尝试做这样的事情:
output.setText("");
答案 6 :(得分:0)
output.setText("");
将解决此问题
答案 7 :(得分:0)
我认为你在寻找的是:
output.setText("");
答案 8 :(得分:0)
这样就可以了。
output.setString( “”);
答案 9 :(得分:0)
其他答案指出字符串是不可变的这一事实是准确的。
但是如果你想拥有"清除字符串"的功能,你可以use a StringBuffer instead and call this on it:
stringBuffer.delete(0, stringBuffer.length());