做一些研究Model-View-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();
}
}
在小例子中,可能很好地让视图和控制器混合在一起(视图处理本例中的按钮按下)。
至于两者之间的沟通,我会建议是,你让你的模型扩展Observable
public class Model extends Observable {
public void transform() {
// Do the transformation
// notify the view
setChanged();
notifyObservers();
}
}
,使观落实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();
}
}
这看起来很有希望,我会研究它。 – sparkFinder 2010-08-11 00:22:22