2012-12-12 48 views
0

考慮以下情形:從各種不同的JFrames收集數據有效

我有一個JFrame 「主要」 其中有一個JButton 「caravanDataButton」 這將打開另一個JFrame的 「CaravanData」。

CaravanData有幾個JTextField的。其目的是詢問用戶的問題,一旦用戶已經完成了答案傳送回主要

我的問題:什麼是從一個孩子的JFrame將數據傳輸到調用父的JFrame(或者從這個例子從CaravanData返回主)

理想我願做以下的最有效的方法:

class Main 
{ 
    public Main 
    { 
     CustomVariable data = new CaravanData(); 
    } 
} 

但是,構造函數沒有返回類型。但是,這將是最好的方式,因爲變量「數據」不會被分配一個值,直到類CaravanData已經完成了其業務。

我的另一種解決方案是使用getter和setter。但是我必須等到用戶完成表單之後才能檢索數據。我用一個while循環:

class Main 
{ 
    public Main 
    { 
     CaravanData caravanData = new CaravanData(); 
     while (caravanData.isUserFinished == false) 
     {//...Do nothing} 

     // Once the user has finished - collect the data: 
     CustomVariable data = caravanData.getRelevantData(); 
    } 
} 


class CaravanData 
{ 
    ... 
    public boolean isUserFinished() 
    {return ifUserHasCompletedForm;} 

    public CustomerVariable getRelevantData() 
    { 
     ... 
     return data; 
    } 
} 

我不認爲這個方法是有效的。有更好的技術嗎?我有幾個JFrames,因爲有很多問題需要問。我不知道如何在網上找到答案。我確實想過使用線程?停止一個進程直到另一個進程結束。但是當我從美國東部時間的任務中消耗很多時間時,我只能使用線程的印象呢?

回答

1

嘗試使用一個JDialog作爲你的子窗口。的JDialog塊,直到對話框的setVisible(true)方法配置(通常由從該對話框中調用setVisible(false)

之後,你可以通過你的getRelevantData()方法加載的所有數據。

class Main 
{ 
    public Main 
    { 
     CaravanData caravanData = new CaravanData(); 
     // Show the dialog - setVisible(true) blocks till ok is pressed 
     caravanData.setVisible(true); 

     // Once the user has finished - collect the data: 
     CustomVariable data = caravanData.getRelevantData(); 
    } 
} 

class CaravanData extends JDialog 
{ 
    ... 
    // Called by an ActionListener for the OK Button 
    private void okButtonPressed(){ 
     setVisible(false); 
    } 

    public CustomerVariable getRelevantData() 
    { 
     ... 
     return data; 
    } 
}