簡體   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