Swing-GUI不知道构造函数中实例化的外部类

时间:2012-09-21 11:20:37

标签: java swing constructor

我有一个Swing-GUI和一个外部类。 在Swing GUI的构造函数中,我实例化了一个外部类的新对象。 但我不能在GUI类的其他方法中使用此对象(例如在动作侦听器中)。如果我直接在动作侦听器中实例化对象,那么我可以使用外部类的所有方法。

以下是代码的相关摘要;如果你需要更多告诉我: - )

1)我的外部课程

public class ExternalClass
{
    private int a = 100;
    public int getA() {
        return a;
    }
}

2)我的GUI类的部分

public class GUI扩展了javax.swing.JFrame {

// constructor
public GUI()
{
    initComponents();
    ExternalClass e = new ExternalClass();
}
//...
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{

    int u = e.getA();
// this doesn't work - the object e is not known by the method

}
//...
        java.awt.EventQueue.invokeLater(new Runnable()
    {

        public void run()
        {
            new GUI().setVisible(true);

        }
    });

3 个答案:

答案 0 :(得分:2)

您在构造函数中声明并实例化e变量,因此它只在构造函数中可见。

将其声明为成员变量,您可以在那里或在构造函数中实例化它。

答案 1 :(得分:2)

e对象的范围(范围意味着变量的可见性)仅限于构造函数,因为您在该构造函数中说ExternalClass e

最简单的解决方案是将此变量作为类的成员 - 而不是仅仅在构造函数中定义。

ExternalClass e的声明移到构造函数之外,但仍然在类本身中。在构造函数中,只需执行e = new ExternalClass();e在构造函数中是可见的,因为构造函数的范围低于类本身,并且由于同样的原因,它也会在jButton1ActionPerformed方法中可见。

答案 2 :(得分:2)

该对象在构造函数中声明。因此,它只存在于构造函数本身中。如果你想在其他方法中使用它,你必须在外面声明它,作为类的属性,例如像这样。

ExternalClass e;    

// constructor
public GUI()
{
    initComponents();
    e = new ExternalClass();
}

请注意,此字段对于包含GUI类的包中的所有类都是可见的。您可能希望指定访问级别(私有,公共或无访问包)。