JAVA Swing-将JLabel设置为另一个类中的字符串

JAVA Swing-将JLabel设置为另一个类中的字符串,java,swing,class,methods,jlabel,Java,Swing,Class,Methods,Jlabel,我在一个类中有一个名为getTheUserInput的方法,该方法返回一个字符串,该字符串根据用户操作进行更新,该字符串位于名为Board.java的类中。我有一个动作,将数据添加到一个我知道有效的字符串中 在我的另一个类中,我有一个JLabel,它被设置为等于方法的返回字符串,如下所示: JLabel l = new JLabel(b.getTheUserInput()); 但是,当我运行应用程序时,无论用户提供什么输入,字符串都会更新,但JLabel保持空白。如何使JLabel与另一个类中

我在一个类中有一个名为
getTheUserInput
的方法,该方法返回一个字符串,该字符串根据用户操作进行更新,该字符串位于名为Board.java的类中。我有一个动作,将数据添加到一个我知道有效的字符串中

在我的另一个类中,我有一个JLabel,它被设置为等于方法的返回字符串,如下所示:

JLabel l = new JLabel(b.getTheUserInput());

但是,当我运行应用程序时,无论用户提供什么输入,字符串都会更新,但JLabel保持空白。如何使JLabel与另一个类中的字符串保持一致更新?

您可能会。。。。需要更新
JLabel

myJLabel.setText(newString);
Java中的
String
s是不可变的,因此它们永远不能更改

例如,当你说,“我有一个动作,它将数据添加到一个我知道有效的字符串中。”。。。你错了。您已经创建了一个新的
字符串
。如果要更改文本,需要为
JLabel
提供新的
字符串(用户输入)


编辑:回答问题的最后一部分;您需要跟踪
JLabel
,并在每次用户提供输入时(在事件处理程序中)更新它,如我上面所示。使用可能是一个选项,因为Java通过
Observer
Observable
提供了它,您应该。。。。需要更新
JLabel

myJLabel.setText(newString);
Java中的
String
s是不可变的,因此它们永远不能更改

例如,当你说,“我有一个动作,它将数据添加到一个我知道有效的字符串中。”。。。你错了。您已经创建了一个新的
字符串
。如果要更改文本,需要为
JLabel
提供新的
字符串(用户输入)


编辑:回答问题的最后一部分;您需要跟踪
JLabel
,并在每次用户提供输入时(在事件处理程序中)更新它,如我上面所示。使用可能是一个选项,因为Java通过
Observer
Observable

提供了这两种可能性


首先是更新文本
l.setText(b.getTheUserInput())另一个选项是您没有将标签添加到容器中

有两种可能性


首先是更新文本
l.setText(b.getTheUserInput())另一个选项是您没有将标签添加到容器中

默认情况下,该标签由
b.getTheUserInput()
最初返回的内容设置。如果
b.getTheUserInput()
的输出发生更改,则标签无法找到,因此不会更改其文本

解决此问题的最简单方法是在
b.getTheUserInput()
有新输出时调用
l.setText(b.getTheUserInput())


另一种方法是编写一个监听器(如a),每当
b.getTheUserInput()
有新的输出时发送一个事件,然后让标签添加监听器并在收到事件时更改其文本。起初这看起来可能更复杂,但优点是
Board
不需要知道标签或将来可能要访问其输出的任何其他信息。

默认情况下,该标签由
b.getTheUserInput()
最初返回的内容设置。如果
b.getTheUserInput()
的输出发生更改,则标签无法找到,因此不会更改其文本

解决此问题的最简单方法是在
b.getTheUserInput()
有新输出时调用
l.setText(b.getTheUserInput())


另一种方法是编写一个监听器(如a),每当
b.getTheUserInput()
有新的输出时发送一个事件,然后让标签添加监听器并在收到事件时更改其文本。这在一开始看起来可能更复杂,但优点是
不需要知道标签或任何其他将来可能想要访问其输出的信息。

OP似乎认为他给了
JLabel
一个指向
字符串的指针,并期望
JLabel
显示对该
字符串所做的更改;他不明白字符串是不可变的(即使是可变对象,Java也很少以这种方式运行)。这也许可以解释OP的想法,即
…已设置为等于返回的字符串…
。但是现在真的很难想象背后的逻辑。似乎OP认为他给了
JLabel
一个指向
字符串的指针,并期望
JLabel
显示对该
字符串所做的更改;他不明白字符串是不可变的(即使是可变对象,Java也很少以这种方式运行)。这也许可以解释OP的想法,即
…已设置为等于返回的字符串…
。但现在真的很难想象背后的逻辑。关键是理解参考变量和它所指对象之间的区别。如果字符串变量
String foo=“bar”,之后我将其更改为
foo=“baz”,foo变量引用不同的字符串对象,但原始“bar”字符串不变。JLabel显示一个字符串对象,并绑定到该字符串对象,而不是任何字符串变量。变量以后可能引用新字符串,但JLabel仍然引用相同的字符串对象。关键是理解引用变量与其引用的对象之间的区别。如果字符串变量
String foo=“bar”,之后我将其更改为
foo=“baz”,foo变量引用不同的字符串对象,但原始“bar”字符串不变。JLabel显示一个字符串对象,并绑定到该字符串对象,而不是任何字符串变量。弗吉尼亚州