如何为单个按钮设置多个ActionListener

时间:2015-04-02 01:56:28

标签: java swing model-view-controller actionlistener

我有一个基于向导的软件,有许多面板。获取最后一个屏幕可以有不同的路径。因此每条路径都有自己的控制器来计算数据。在最后一个面板中,所有路径都在那里结束,有一个按钮来完成数据。该按钮具有在所有路径的控制器中调用的动作侦听器。因此,当按下按钮时,它基本上会运行所有控制器,显然会出现错误。 以下是最终面板中按钮动作侦听器的方法:

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

每个控制器的承包商我都会像这样初始化动作监听器:

控制器1:

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

class destinationNextButtonListener implements ActionListener{...}

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

有什么想法吗?

2 个答案:

答案 0 :(得分: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
}

如果您能向我们展示更多代码以便我们更好地了解您的计划,那就太棒了。我的解决方案基于我相信您的程序编码的方式。看到实际代码会很棒。当您编辑代码并将其添加到问题中时,请在此答案的评论部分添加一条消息,我将编辑我的解决方案。

答案 1 :(得分:1)

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

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

所有其他屏幕也会有他们的特定控制器(可能甚至应该从最后一个屏幕继承)

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

相关问题