我正在为某些代码构建Java GUI,我对某些设计方面不太确定。
作为背景 - GUI将仅用于一个活动流
我想知道的是 - 是否可以设计一些硬编码GUI代码,以便在加载文件后,与按钮相关的事件从连接转换1到2更改为3?
这些转换的功能是在另一个Java文件中实现的,我想知道两者之间的分离/通信是如何工作的;或者如果我应该继续使用一个文件来涵盖使用GUI项目执行的数学功能。
如果您认为有任何问题可以帮助您回答这个问题,请随时提出。
答案 0 :(得分:3)
对Model-View-Controller范式进行一些研究;它可能最适合你想要做的事情。
在您当前的设置中,您编写的代码就是模型。它包含适用于您的应用程序的所有“业务逻辑”。您需要编写的是前端,视图和控制器。 Controller充当View和Model之间的中介;当您单击按钮(视图元素)时,关联的按钮处理程序(控制器)将通过调用某个方法委托给模型。例如
public class View extends JPanel implements ActionListener {
JButton transform = new JButton("Transform1");
Model m;
public View(Model m) {
super();
this.m = m;
transform.setActionListener(this);
// lay out the GUI
setLayout(...);
add(// whatever view you need to visualize the data);
add(transform);
}
/**
Make sure all of the GUI elements are correct */
public void update() {
State transformState = m.getTransformState();
transform.setText(transformState.getNextStateDescription());
// Draw the state of the file they loaded in, probably to another JPanel
}
public void actionPerformed(ActionEvent e) {
m.transform();
}
}
在小例子中,将View和Controller混合在一起可能很好(视图在这个例子中处理按钮按下)。
就两者之间的沟通而言,我建议您使模型扩展Observable
public class Model extends Observable {
public void transform() {
// Do the transformation
// notify the view
setChanged();
notifyObservers();
}
}
并制作View工具Observer
public class View implements ActionListener, Observer {
public View(Model m) {
// snip
m.addObserver(this);
}
public void update(Observable o, Object arg) {
// Delegate to previously defined method
update();
}
}
答案 1 :(得分:2)
我肯定会将GUI和数学分成不同的类。至于GUI,我建议不要因为让类设计正确而陷入困境,而只是以最简单的方式做到这一点。