【问题标题】:How to pass user input from GUI to main class如何将用户输入从 GUI 传递到主类
【发布时间】:2011-08-25 07:38:20
【问题描述】:

我刚刚开始再次使用 Java Swing,但我遇到了与上次相同的问题。 我想编写一个程序来读取一些用户输入,执行算法并显示结果。该程序必须使用两种不同的用户界面(控制台和带有 Java Swing 的 GUI)。

目前我有一个包含算法的类包(我可以传入用户输入并获取结果),一个包含主类的类,一个控制台接口类和一个 GUI 类(其中从 JFrame 扩展)。 一些代码:


public class Algorithm {
//a lot of code
}
public class MainClass {
    public static void main(...) {
        Algorithm algorithm = new Algorithm();
        //use either console or GUI and read user input
        algorithm.execute(user input);
        algorithm.getResult();
        //display result on console/GUI
    }
}
public class GUI extends JFrame implements ActionListener {
}

我的问题是我不知道如何将用户输入(文本、缩放器和单选按钮、按钮)从 GUI 传递到算法以及如何在 GUI 上显示结果。

我是否必须将算法实例传递给 GUI 并从 GUI 调用算法的方法?
或者是否可以在 MainClass 中实现 ActionsListener(我有一个算法实例)?如果我选择这种实现方式,我如何将算法的结果传递回 GUI?
还是我应该改变整个实施? :D

【问题讨论】:

    标签: java main actionlistener


    【解决方案1】:

    简短回答:不要(至少不要对 Main 类)。

    长答案:有一种称为模型-视图-控制器 (MVC) 的模式,它解释了如何从用户那里获取数据,对其进行处理并再次显示。这个链接(以及整个网站)是一个很好的起点:http://martinfowler.com/eaaDev/uiArchs.html

    应用于您的代码示例:

    public class Algorithm {
    //a lot of code
    }
    public class MainClass {
        public static void main(...) {
            Algorithm algorithm = new Algorithm();
            GUI g = new GUI(algorithm );
        }
    }
    public class GUI extends JFrame implements ActionListener {
        private Algorithm algo;
        public GUI(Algorithm a) { this.algo = a; }
    }
    

    Algorithm在这里扮演模型的角色,GUI是控制器和视图的组合。

    【讨论】:

      【解决方案2】:

      您可以使用观察者模式。在这种情况下,算法是 java.util.Observer,而 Gui 是 java.util.Observable。

      【讨论】:

      • 他已经在使用观察者模式了! (ActionListener) 算法根本不需要在 GUI 上注册,因为那是控制器的工作。如果没有控制器,GUI 的工作就是了解所有逻辑。
      【解决方案3】:

      由于您将算法很好地封装在其自己的类中,因此应该很容易实例化类型为算法的对象,以响应您的 GUI 上的按钮单击并在那里执行算法。 main 方法应该只决定是否需要 GUI 并启动它。

      因此,如果您的 GUI 上有一个名为“计算”的按钮,那么:

        calculate.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                     //get the user input from the JFrame
                     Algorithm algorithm = new Algorithm();
                     algorithm.execute(user input);
                     algorithm.getResult();
                     //display results on the JFrame
                }
        });
      

      从 JTextField 等获取输入就像

      一样简单
        mytextfield.getText();
      

      将一些值写入 JLabel 以显示是:

        mylabel.setText("Some Text");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多