[英]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.