我是Java和这个网站的新手。
我试图尽可能模仿游戏。所以我有一个GameEngine类和一个GUI clase,它们是完全独立的。还有另一个类是两者的接口。
问题是我无法获取GUI对象(actionPreformed例程所在的位置)来触发GameEngine类中的方法。我试图在界面中进行所有编程,而不必修改任何其他两个类(或者至少不使它们具有相关性)。
我的想法是让actionPerformed返回一个代码,该代码在指向下一个动作的界面中处理。
例如,NewGame按钮生成一个NewGameCode。但是如何使用该代码并在界面内触发GameEngine中的NewGame方法?
答案 0 :(得分:0)
使用一些编程模式,例如委派:
ActionListener.java:
char
GUI.java:
interface ActionListener {
public boolean performAction(Action action);
}
GameEngine.java:
class GUI implements ActionListener {
protected ActionListener actionListener;
public void setActionListener(ActionListener listener) {
this.listener = listener;
}
public boolean performAction(Action action) {
// GUI knows, how to handle specified action:
if (action.is("toggle-gui")) {
...
return true;
}
// else, should Engine try to perform that action?
if (listener != null)
if (listener.performAction(action))
return true;
// rare occasion
return false;
}
}
SomeInitializationCode.java
class GameEngine implements ActionListener {
public boolean performAction(Action action) {
if (action.is("game-new")) {
// start a new game here
...
return true;
}
return false;
}
}
另外,正如您可能已经猜到的那样,gui对象(如按钮)也有自己的动作侦听器。当GUI实例化一个按钮时,它将自己设置为按钮的动作监听器,因此,按钮的动作执行被委托给GUI,当GUI不知道时,如何执行该指定的动作 - 它代表们将工作委托给GameEngine。
P.S。抱歉我的英语不好。