如何将用户输入从GUI传递到主类

时间:2011-05-13 23:22:30

标签: java main actionlistener

我刚刚开始使用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

3 个答案:

答案 0 :(得分:2)

简短的回答:不要(至少不是主类)。

长答案:有一种称为模型 - 视图 - 控制器(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是控制器和视图的组合。

答案 1 :(得分:0)

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

因此,如果你的GUI上有一个名为calculate的按钮,那么:

  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");

答案 2 :(得分:0)

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