代码之家  ›  专栏  ›  技术社区  ›  Frank

使用JavaSwing应用程序,如何将对话框面板中的值导入主应用程序?

  •  2
  • Frank  · 技术社区  · 14 年前

    在我的Swing应用程序中,用户可以单击一个按钮打开一个对话框面板并输入一些值,然后他们可以单击该面板上的“确定”将其关闭并返回主程序,但是我如何将他们输入的值传递给主程序而不先将其保存到文件中呢?

    7 回复  |  直到 14 年前
        1
  •  -1
  •   kurhan    14 年前

    您可能想尝试以下解决方案:

    private static String[] returnValues = new String[10]
    private static MyDialog dialog;
    
    private MyDialog() {
      initDialog()
    }
    
    private void closeDialog()
    {
         dispose();
    }
    
    private initDialog()
    {
    
     //....
     btnOk = new JButton("OK");
      jTextField1 = new JTextField();
      ...
      jTextField10 = new JTextField();
      ...
      ActionListener btnOK_click = new ActionListener() {
    
            public void actionPerformed(ActionEvent e)
            {
                returnValues[0] = jTextField1.getText();
                ...
                returnValues[9] = jTextField10.getText();
                closeDialog();  
            }
      }
      btnOk.addActionListener(btnOk_click);
    }
    
    public static String[] showMyDialog() {
        dialog = new MyDialog();
        dialog.setVisible(true);
        return returnValues;
    }
    

    }

        2
  •  2
  •   akf    14 年前

    你可以做以下几件事:

    • 您可以在应用程序和对话框之间创建观察者/观察者关系,并在对话框关闭时使用事件中的值使对话框发布事件。
    • 你可以在你的应用程序中维护一个对话框的句柄,当你调用 setVisible(false)
        3
  •  1
  •   Tom Hawtin - tackline    14 年前

    UI通常应该在底层应用程序上分层(在我看来,UI本身应该被划分为多个层,但是另一个层会将应用程序的相关部分传递给UI的创建。当您准备好让值从UI传递到应用程序(可以是多页对话框上的OK按钮,一直到每次击键),将数据推送到应用程序组件。

        4
  •  1
  •   jfpoilpret    14 年前

    Observable Observer API,我建议你看看 事件总线 “,这应该特别适合你的情况。

        5
  •  1
  •   nnn    13 年前

    只需在dialog类中用一个方法定义一个接口(比如:“returnToCaller(returntype rt)”)。

    对话框的构造函数将此接口的一个实例作为输入,并使用它在exit/ok时返回结果。

    mainmodule(window或其他什么)只是实例化了对话框,从而对接口进行了不知名的使用,定义了return方法,有点像委托(c#)。

        MyDialog md = new MyDialog(new MyDialog.ReturnToCaller() {
            public void returnToCaller(ReturnValues rv) {
                             // Handle the values here
            }
        });
        md.setModal(true);
        md.setVisible(true);
    
        6
  •  0
  •   Eugene Ryzhikov    14 年前

    我建议采用MVC(Model-view-controller)设计。所以对话框将是您的视图,也可能是控制器。但是必须有一个域类作为你的模型。例如,如果创建对话框是为了编辑个人数据,那么您可以使用名为Person的类来保存数据。对话框的设计方式应该使您可以设置并从中获取人员。

        7
  •  0
  •   Sporniket    11 年前

    实现对话框面板的类必须有一个到主程序的链接,并且主程序必须提供一个带有参数的方法,这些参数将是要传输的值。

    class Main {
        //...
        private Dialog myDialog ;
    
        public Main(){
            //...
            myDialog = new Dialog(this);
            //...
        }
    
        //...
    
        public void onDialogOk(String valueA, int valueB)
        {
            //...
        }
    }
    
    class Dialog implement ActionListener{
        //...
        private Main myMain ;
    
        public setMain(Main main){
            myMain = main;
        }
    
        public Dialog(Main main){
            //...
            setMain(main) ;
    
            //...
            JButton ok = new JButton("ok") ;
            ok.addActionListener(this);
        }
    
        public void actionPerformed(ActionEvent e) { 
            // retrieve form values
            String valueA = ... ;
            int valueB = Integer.parse(...);
            myMain.onDialogOK(valueA, valueB) ; //DONE
        }
    }