Java 为什么可以';我不能在构造函数之外访问JLabel吗?

Java 为什么可以';我不能在构造函数之外访问JLabel吗?,java,jlabel,Java,Jlabel,因此,我在我的主类的构造函数中创建了一个JLabel,然后,我在类中有一个单独的方法来更新它(updateLabel()。但无法从更新方法中访问标签。如何从方法内部访问它?谢谢 public Difficulty(){ JLabel lblNewLabel = new JLabel((comboBox_9.getSelectedItem().toString())); lblNewLabel.setBounds(300, 70, 46, 23); contentPane.

因此,我在我的主类的构造函数中创建了一个JLabel,然后,我在类中有一个单独的方法来更新它(updateLabel()。但无法从更新方法中访问标签。如何从方法内部访问它?谢谢

public Difficulty(){
    JLabel lblNewLabel = new JLabel((comboBox_9.getSelectedItem().toString()));
    lblNewLabel.setBounds(300, 70, 46, 23);
    contentPane.add(lblNewLabel);
}

public void updateLabel(Skill skill){

}
在更新标签方法中,我想说
lblNewLabel.setText(skill.toString())


但是我无法访问标签。

您必须在构造函数外部声明它,以使其他方法可见。如果在构造函数内部声明它,则它有一个局部范围,而不是全局范围,这意味着只能在构造函数内部访问它。通常,在方法内部声明的所有内容都只能在该构造函数内部访问方法

For example:
public class Foo{

   JLabel label=new JLabel("Global");//this has a global scope
   public Foo(){

      JLabel label_1=new JLabel("local scope");//this can't be accesed outside    //the constructor
    label_1.setText("new text");//but inside the constructor you can do what you want
   }
}

您必须在构造函数外部声明它,以使其对其他方法可见。如果在构造函数内部声明它,则它具有局部作用域而不是全局作用域,这意味着它只能在构造函数内部访问。通常,方法内部声明的所有内容只能在该方法内部访问

For example:
public class Foo{

   JLabel label=new JLabel("Global");//this has a global scope
   public Foo(){

      JLabel label_1=new JLabel("local scope");//this can't be accesed outside    //the constructor
    label_1.setText("new text");//but inside the constructor you can do what you want
   }
}

你需要考虑变量范围:

如果您在构造函数的作用域内声明了一个对象,那么它将无法在其他地方访问,例如updateLabel()方法

尝试将JLabel声明为字段,例如:

private JLabel label;

public JLabelContainer() {
   label = new JLabel();
}

public void updateLabel(String text){
  label.setText(text);
}

这里,标签是在字段级别声明的,在构造函数中实例化,然后在UpDelelabel[..…/Cult>方法]中访问。

< P>您需要考虑变量范围:

如果您在构造函数的作用域内声明了一个对象,那么它将无法在其他地方访问,例如updateLabel()方法

尝试将JLabel声明为字段,例如:

private JLabel label;

public JLabelContainer() {
   label = new JLabel();
}

public void updateLabel(String text){
  label.setText(text);
}

这里,标签在字段级别声明,在构造函数中实例化,然后在
updateLabel(..)
方法中访问。

要在任何方法中访问变量,它应该在该块的范围内。如果要访问类中的任何位置的变量,则该变量应具有
public
访问权限,或者至少是
private
实例变量

在您的情况下,由于
JLabel
在构造函数中具有
local
访问权限,因此该变量的作用域在构造函数结束时立即结束

对于您的情况,这可能是可行的解决方案之一:

private JLabel lblNewLabel;

public Difficulty(){
    lblNewLabel = new JLabel((comboBox_9.getSelectedItem().toString()));
    lblNewLabel.setBounds(300, 70, 46, 23);
    contentPane.add(lblNewLabel);
}

public void updateLabel(Skill skill){
    //access lblNewLabel here.
}

要在任何方法中访问变量,它应该在该块的范围内。如果要访问类中的任何位置的变量,则该变量应具有
public
访问权限,或者至少是
private
实例变量

在您的情况下,由于
JLabel
在构造函数中具有
local
访问权限,因此该变量的作用域在构造函数结束时立即结束

对于您的情况,这可能是可行的解决方案之一:

private JLabel lblNewLabel;

public Difficulty(){
    lblNewLabel = new JLabel((comboBox_9.getSelectedItem().toString()));
    lblNewLabel.setBounds(300, 70, 46, 23);
    contentPane.add(lblNewLabel);
}

public void updateLabel(Skill skill){
    //access lblNewLabel here.
}

我猜是因为JLabel变量的范围。在构造函数中定义和创建的JLabel将无法从构造函数外部访问。是否有类似于
公共类Foo{private JLabel label;public Foo(){label=new JLabel(“label”);}…}
?因此:给我们看看你的代码。你能给我们看看代码吗?我猜是因为JLabel变量的范围。在构造函数中定义和创建的JLabel将无法从构造函数外部访问。是否有类似于
公共类Foo{private JLabel label;public Foo(){label=new JLabel(“label”);}…}
?因此,请给我们看一下您的代码,好吗?