2017-02-10 84 views
0

我试图保持行动尽可能分离,但我遇到了一个行动之前发射的问题。现在我有一个添加了两个动作侦听器的按钮。Java Swing多个ActionListeners

JButton button = new JButton(); 
... 
button.addActionListener (new Action1()); 
button.addActionListener (new Action2()); 

2正在发生之前1.如何保证订单?有没有办法触发其他操作?

+0

那么您可以在ActionListener中以任何顺序使用方法调用。 – Lemonov

+0

创建第三个“Action”,它引用“Action1”和“Action2”,将第三个“Action”应用于按钮。被触发时,它会按照你想要的顺序调用“Action1”和“Action2” – MadProgrammer

+0

我看到你是新来的SO 如果你觉得答案解决了这个问题,请点击绿色检查标记为“接受”标记。这有助于将重点放在仍然没有答案的旧帖子上。 –

回答

4

通常,事件源不会保证通知听众的顺序。这是一个原因:模式/概念是关于解耦监听者代码的,即监听者应该彼此独立。

如果Action1Action2真的需要协调他们的工作,代码不应该分散在两个地方。

3

如果两个动作依赖于它们的顺序,那么它在功能上是一个动作。我只会注册第一个actionlistener,并直接从第一个中调用第二个,或者 - 甚至更好 - 在单个actionlistener中编写代码。

+0

我可能已经在想这个了,但是如何在一个动作中触发一个动作? – SunLightGirl99

+0

@ SunLightGirl99'class MyAction extends AbstractAction {Action subAction = ...; public void actionPerformed(ActionEvent e){subAction.actionPerformed(e); }}' –

+0

@ SunLightGirl99你为什么要发起一个动作?通常情况下,您希望执行此操作或希望Java Swing执行此操作,以便将此操作异步处理到Swing-GUI。但是在你的第一个actionListener中,你已经与你的gui异步了 - 那么直接调用第二个actionListener的方法有什么问题?我认为没有必要直接调用该方法来触发一个动作! –