0

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

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

1)我的外部课程

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

2) 我的 GUI 类的一部分

公共类 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);

        }
    });
4

3 回答 3

2

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

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

于 2012-09-21T11:26:06.337 回答
2

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

最简单的解决方案是让这个变量成为类的成员——而不仅仅是在构造函数中定义。

将声明ExternalClass e移到构造函数之外,但仍在类本身中。在您的构造函数中,只需执行e = new ExternalClass();. e在这里的构造函数中是可见的,因为构造函数的作用域比类本身低,并且jButton1ActionPerformed出于同样的原因,它在方法中也可见。

于 2012-09-21T11:26:50.403 回答
2

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

ExternalClass e;    

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

请注意,该字段将对包含您的 GUI 类的包中的所有类可见。您可能想要指定访问级别(私有、公共或无包访问)。

于 2012-09-21T11:33:18.743 回答