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