Java 更新JComponent以反映对象更改

Java 更新JComponent以反映对象更改,java,swing,jcomponent,Java,Swing,Jcomponent,我在一个接口中有一系列jlabel,用于显示对象的属性。如果所述对象被同一类的另一个对象替换,是否可以自动更新JComponents?这样的方法会被认为是不好的做法吗?例如,考虑以下内容: String stringToBeDisplayed = new String("String 1"); JLabel label = new JLabel(stringToBeDisplayed); stringToBeDisplayed = new String("String 2"); //*Refre

我在一个接口中有一系列jlabel,用于显示对象的属性。如果所述对象被同一类的另一个对象替换,是否可以自动更新JComponents?这样的方法会被认为是不好的做法吗?例如,考虑以下内容:

String stringToBeDisplayed = new String("String 1");
JLabel label = new JLabel(stringToBeDisplayed);
stringToBeDisplayed = new String("String 2");
//*Refresh label to show string change*

我知道可以使用JLabel.setText()设置JLabel的文本,或者可以替换标签,但是我很懒,而且这些方法对于许多jcomponent来说有点不方便

您尝试执行的操作甚至不会起作用,因为重新初始化
stringToBeDisplayed
不会影响您传递给的任何内容——在本例中,是
JLabel()
构造函数

执行所需操作的方法是调用
JLabel.setText()
。如果你有很多组件,你必须打很多电话。您可能能够包装其中的一些方法,以便调用其中一个方法以批处理方式更新其中的许多方法,但这是您必须采用的方法。您还可以通过将
JLabel
s放入
Collection
s或数组并使用循环来减少键入


尽管从理论上讲,您可以对
JLabel
进行子类化或组合,并添加一个方法,该方法接受一些必须为其编写类的
String
-包装对象,然后您可以让该类接受更改侦听器(观察者模式)在进行更改更新时,您尝试执行的
JLabel

甚至无法工作,因为重新初始化
stringToBeDisplayed
不会影响您传递给的任何内容--在本例中,是
JLabel()
构造函数

执行所需操作的方法是调用
JLabel.setText()
。如果你有很多组件,你必须打很多电话。您可能能够包装其中的一些方法,以便调用其中一个方法以批处理方式更新其中的许多方法,但这是您必须采用的方法。您还可以通过将
JLabel
s放入
Collection
s或数组并使用循环来减少键入


尽管从理论上讲,您可以对
JLabel
进行子类化或组合,并添加一个方法,该方法接受一些必须为其编写类的
String
-包装对象,然后您可以让该类接受更改侦听器(观察者模式)在进行更改更新时,您尝试执行的
JLabel

甚至无法工作,因为重新初始化
stringToBeDisplayed
不会影响您传递给的任何内容--在本例中,是
JLabel()
构造函数

执行所需操作的方法是调用
JLabel.setText()
。如果你有很多组件,你必须打很多电话。您可能能够包装其中的一些方法,以便调用其中一个方法以批处理方式更新其中的许多方法,但这是您必须采用的方法。您还可以通过将
JLabel
s放入
Collection
s或数组并使用循环来减少键入


尽管从理论上讲,您可以对
JLabel
进行子类化或组合,并添加一个方法,该方法接受一些必须为其编写类的
String
-包装对象,然后您可以让该类接受更改侦听器(观察者模式)在进行更改更新时,您尝试执行的
JLabel

甚至无法工作,因为重新初始化
stringToBeDisplayed
不会影响您传递给的任何内容--在本例中,是
JLabel()
构造函数

执行所需操作的方法是调用
JLabel.setText()
。如果你有很多组件,你必须打很多电话。您可能能够包装其中的一些方法,以便调用其中一个方法以批处理方式更新其中的许多方法,但这是您必须采用的方法。您还可以通过将
JLabel
s放入
Collection
s或数组并使用循环来减少键入


尽管从理论上讲,您可以对
JLabel
进行子类化或组合,并添加一个方法,该方法接受一些必须为其编写类的
String
-包装对象,然后您可以让该类接受更改侦听器(观察者模式)在发生更改时,请更新
JLabel

很抱歉,您犯了一个基本的java错误。字符串在java中是不可变的。您已将字符串对象“String 1”传递给JLabel。JLabel没有指向stringToBeDisplayed的“指针”,因此将另一个String对象分配给变量stringToBeDisplayed将不起作用。

很抱歉,您会犯一个基本的java错误。字符串在java中是不可变的。您已将字符串对象“String 1”传递给JLabel。JLabel没有指向stringToBeDisplayed的“指针”,因此将另一个String对象分配给变量stringToBeDisplayed将不起作用。

很抱歉,您会犯一个基本的java错误。字符串在java中是不可变的。您已将字符串对象“String 1”传递给JLabel。JLabel没有指向stringToBeDisplayed的“指针”,因此将另一个String对象分配给变量stringToBeDisplayed将不起作用。

很抱歉,您会犯一个基本的java错误。字符串在java中是不可变的。您已将字符串对象“String 1”传递给JLabel。JLabel没有指向stringToBeDisplayed的“指针”,因此将另一个字符串对象分配给变量stringToBeDisplayed将不起作用。

不,您不能这样做

把一个变量想象成一个盒子。“stringToBeDisplayed”框包含该字符串。setText()将该框中的内容倒入另一个框中,即标签中的文本,因为它是一个计算机科学框,所以“stringToBeDisplayed”仍然被填充(隐喻从来都不起作用)

现在,您在“stringToBeDisplayed”框中添加了一些新内容。另一个盒子应该怎么打开