2012-09-21 34 views
0

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

     } 
    }); 

回答

2

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

ExternalClass e;  

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

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

2

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

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

2

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

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

ExternalClass e的声明移到构造函数之外,但仍然在类中。在你的构造函数中,只需要做e = new ExternalClass();e在构造函数中可见,因为构造函数的范围比类本身的范围小,同样也会出现在jButton1ActionPerformed方法中。

相关问题