有效地从各种不同的JFrame收集数据

时间:2012-12-12 14:01:14

标签: java

考虑以下情况:

我有一个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耗费大量时间时,你只使用线程?

1 个答案:

答案 0 :(得分: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;
    }
}