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