我有一个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);
}
});
答案 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类的包中的所有类都是可见的。您可能希望指定访问级别(私有,公共或无访问包)。