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

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

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

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

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

你需要更新JLabel

 myJLabel.setText(newString); 

Java中的String是不可变的,因此它们永远不会更改/更改。

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

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

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

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

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

有两种可能性。

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