簡體   English   中英

有效地從各種不同的JFrame收集數據

[英]Collecting data from various different JFrames efficiently

請考慮以下情形:

我有一個JFrame“ Main ”,它有一個jButton“ caravanDataButton ”,它可以打開另一個JFrame“ CaravanData ”。

CaravanData有幾個JTextField。 其目的是向用戶提出問題,並在用戶完成操作后將答案傳送回Main

我的問題: 從子JFrame到調用父JFrame的數據傳輸的最有效方法是什么(或者從此示例中從CaravanData回到Main)

理想情況下,我想執行以下操作:

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

但是,構造函數沒有返回類型。 但這是最好的方法,因為在CaravanData類完成其業務之前,不會為變量“ data”分配值。

我的替代解決方案是使用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;
    }
}

我認為這種方法根本無效。 有更好的技術嗎? 我有幾個JFrame,因為有很多問題要問。 我不確定該如何措辭以在網上找到答案。 我確實考慮過使用線程嗎? 停止一個進程,直到另一個進程完成。 但是我給您的印象是,當任務從EDT中消耗大量時間時,您僅使用線程嗎?

嘗試將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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM