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("");

如果文本为空或为空,则具有简单删除旧文本的效果。

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);只是将 的传递outputString给文本框对象。如果并且当用户在框中键入内容时,这些字符将存储在其他位置,并且仅在您的代码调用output.getText().

于 2012-06-19T13:55:15.657 回答
1

您的代码所做的是首先将文本字段的内容设置为 outputString 变量 in: 的内容output.setText( outputString );

您的后续代码行不会更改 String 对象,这是您的文本字段的内容,而是将您的 outputString 变量设置为引用空字符串变量。字符串在 Java 中是不可变的,不可能将一个字符串变量的更改反映到另一个字符串变量。

正如许多人所说,您需要通过调用来设置文本字段内容:jTextFieldVar.setText("");jTextFieldVar.setText(null);.

于 2012-06-19T13:42:37.613 回答
1
output.setText("");

会解决这个问题

于 2012-06-19T13:39:53.863 回答
1

为什么会这样?

字符串是不可变的。

总是有一个对字符串的新引用。因此,当您调用 时outputString = "";,会创建新的 String。

我该如何解决?

打电话output.setText("");

于 2012-06-19T13:40:01.923 回答
0

我认为您正在寻找的是:

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

尝试设置 JTextField 的文本后,是否将输出字符串设置为“”?如果是这样,您应该尝试执行以下操作:

  output.setText("");
于 2012-06-19T13:39:06.950 回答
0

这会很好的。

输出.setString("");

于 2012-06-19T14:40:10.637 回答
0

其他指向字符串不可变这一事实的答案是准确的。

但是如果你想拥有“清除字符串”的功能,你可以使用 StringBuffer 来代替它并调用它

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