2012-09-21 35 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方法中。

相關問題