为什么我不能在构造函数之外访问JLabel?

时间:2015-11-27 16:58:14

标签: java jlabel

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

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())

但我无法访问该标签。

3 个答案:

答案 0 :(得分:3)

您需要考虑变量范围:Java Tutorials - Declaring Member Variables

如果在构造函数的范围中声明对象,则无法在其他位置访问该对象,例如updateLabel()方法。

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

private JLabel label;

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

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

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

答案 1 :(得分:0)

你必须在构造函数之外声明它以使其对其他方法可见。如果你在构造函数中声明它,它有一个本地范围而不是全局,这意味着它只能在构造函数内访问。一般来说,所有声明只能在该方法中访问方法内部

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
   }
}

答案 2 :(得分:0)

要在任何方法中访问变量,它应该在该块的范围内。如果您想要访问类中任何位置的变量,那么该变量应该具有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.
}