繁体   English   中英

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

[英]Swing-GUI doesn't know external class instantiated in constructor

我有一个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);

        }
    });

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

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

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

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

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

该对象在构造函数中声明。 因此,它仅存在于构造函数内部。 如果要在其他方法中使用它,则必须在外部将其声明为类的属性,例如:

ExternalClass e;    

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM