0

考虑以下场景:

我有一个 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 消耗大量时间时才使用线程?

4

1 回答 1

1

尝试使用 JDialog 作为您的子窗口。setVisible(true)JDialog的方法阻塞直到对话框被释放(通常通过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;
    }
}
于 2012-12-12T14:33:21.960 回答