JAVA Swing - 将JLabel设置为等于另一个类中的String

时间:2012-01-30 22:38:11

标签: java swing class methods jlabel

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

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

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

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

3 个答案:

答案 0 :(得分:4)

你需要更新JLabel

myJLabel.setText(newString);
Java中的

String是不可变的,所以它们永远不会改变/被改变。

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

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

提供它

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

有两种可能性。

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