2015-04-02 53 views
0

我有一个基于向导的软件,包含许多面板。可以有不同的路径来获取最后一个屏幕。所以每条路径都有自己的控制器来计算数据。在所有路径结束的最后一个面板中,有一个按钮来完成数据。该按钮具有在所有路径的控制器中调用的动作侦听器。所以当按下按钮时,它基本上会运行所有的控制器,并且出现明显的错误。 下面是在最后的面板按钮动作监听器的方法:我初始化动作监听这样如何为单个按钮设置多个ActionListeners

public void destinationNextButtonListener(ActionListener listenForDestinationNextButton){ 
     localDestinationNext.addActionListener(listenForDestinationNextButton); 
} 

而且每个控制器的承包商:

控制器1:

{ 
. 
. 
this.localDestinationChooser.destinationNextButtonListener(new destinationNextButtonListener()); 
} 

class destinationNextButtonListener implements ActionListener{...} 

所以,如果有2个控制器,当按下按钮时,所有控制器开始工作。我正在寻找一个逻辑或者动作监听器决定它必须监听哪个控制器的东西。

有什么想法?

+1

我的猜测是最后的屏幕应该由它自己的控制器控制。所有其他屏幕也会有其特定的控制器(可能从最后一个屏幕继承),以便所有向导页面上的最后一个屏幕上的按钮行为相同,而不管使用哪种实现(因为它们全部从父级继承) - 有道理? – ochi 2015-04-02 02:01:19

+1

@ochi感谢您的评论,它实际上启发了我,是的答案是为每个屏幕分开控制器。如果你提供它作为答案,我可以勾选它。 – Dan 2015-04-03 02:39:07

回答

1

我认为你应该在你的设计中使用继承来提高灵活性(并且消除复杂性)。

这个概念应该是每个屏幕都应该由自己的控制器来控制。

所有其他屏幕将有其特定的控制器,以及(可能,甚至应该从最后一个屏幕一个继承)

有了到位,按钮的最后一个屏幕上的行为同样为所有向导页面,无论使用哪个实现(因为它们都是从父页面继承的)

1

最好的想法(我知道的,而且我不是Java大师)将会在布尔语句中放入,如果用户沿着这条路径走下去的话。这样在ActionListener定义boolean alphaPath(应该在程序开始时应该实例化为false并且应该是一个类变量,不是本地的)然后设置为true。然后在最后ActionListener使用 if else-if(延伸必要,即添加另一个else-if)语句设定为找到哪条路径,用户便下去,执行正确的代码,这样

if(alphaPath == true) 
{ 
    //execute proper code 
} 

else if(betaPath == true) 
{ 
    //execute beta code 
} 

如果可以的话这将是巨大向我们展示更多代码,以便我们能够更好地理解您的程序。我基于我的解决方案,我的相信您的程序编码。看到实际的代码会很好。当您编辑代码并将其添加到您的问题中时,请在该答案的评论部分中添加一条消息,我将编辑我的解决方案。

+0

谢谢你的回答,不幸的是我无法通过布尔逻辑来修复它。不过,我非常感谢你的回答,并且我认为这个答案适用于小动作听众。 – Dan 2015-04-03 02:42:04