2017-08-13 56 views
1

我有一個概念上的問題(有些問題!) 讓我們用一個真實的項目來解釋它。 我有一個Loginswing窗體,它有主要的方法和應用程序從這裏開始。在另一個裏面使用其他類方法和字段

java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new Login().setVisible(true); 
     } 
    }); // this method is inside main Method 

Login表格包含一些TextField S和Button S,也有一些methods。 (例如,當我按下Enter按鈕時,某些認證和動作會執行) 按下Enter按鈕後,如果認證成功,則轉到另一個名爲MainTabbedForm的表格。 現在的問題是關於Object Oriented Programming和類加載。 我想訪問Login表格形式MainTabbedForm。例如,我想在認證成功後disposeLogin表單,並且想要在MainTabbedForm構造函數中執行此操作。我在Login類中編寫了一個方法將登錄連接到MainTabbedForm。通過這種方式:

public void disappearForm(MainTabbedForm form) { 
this.form=form; // I already has defined a MainTabbedForm field in top of the Login class 
this.dispose(); // Dispose the Login class 
} 

並使用它在MainTabbedForm的構造函數,只使用聲明登錄表單作爲MainTabbedForm場之前;

public MainTabbedForm(Login login) { 
    this.login=login; 
    login.disappearForm(this) 
} 

但它給了我NullPointException因爲登錄尚未初始化。 如果我創建一個新的Login類,當然這是一個新類,不會做我想要的事情,因爲是一個新實例,而不是主要方法中第一個創建的Login。 現在我有一個問題,我怎樣才能連接這兩個類彼此? 當然,我可以做一個靜態的方法來完成我的工作!但我不想這樣做。 我認爲是因爲這個類加載和編程藝術框架和設計模式,如OSGiMVC和其他創建,以管理加載和訪問服務和對象和其他更動態的東西,我是對嗎? 現在回覆這些答案真的很感謝!

+0

爲什麼你想從'MainTabbedForm'調用'處置()'?你如何創建'MainTabbedForm'?爲什麼它還會將對*本身*的引用傳遞給'disappearForm()'方法? – David

回答

0

Login你可以這樣做:

MainTabbedForm mtf = MainTabbedForm(); //create 
//set the required information using setters 
//for example set userName which is defined in Login to MainTabbedForm 
mtf.setUserName(this.userName); 
//.... 
this.dispose(); //when no longer needed