我试图保持行动尽可能分离,但我遇到了一个行动之前发射的问题。现在我有一个添加了两个动作侦听器的按钮。Java Swing多个ActionListeners
JButton button = new JButton();
...
button.addActionListener (new Action1());
button.addActionListener (new Action2());
2正在发生之前1.如何保证订单?有没有办法触发其他操作?
我试图保持行动尽可能分离,但我遇到了一个行动之前发射的问题。现在我有一个添加了两个动作侦听器的按钮。Java Swing多个ActionListeners
JButton button = new JButton();
...
button.addActionListener (new Action1());
button.addActionListener (new Action2());
2正在发生之前1.如何保证订单?有没有办法触发其他操作?
通常,事件源不会保证通知听众的顺序。这是一个原因:模式/概念是关于解耦监听者代码的,即监听者应该彼此独立。
如果Action1
和Action2
真的需要协调他们的工作,代码不应该分散在两个地方。
如果两个动作依赖于它们的顺序,那么它在功能上是一个动作。我只会注册第一个actionlistener,并直接从第一个中调用第二个,或者 - 甚至更好 - 在单个actionlistener中编写代码。
我可能已经在想这个了,但是如何在一个动作中触发一个动作? – SunLightGirl99
@ SunLightGirl99'class MyAction extends AbstractAction {Action subAction = ...; public void actionPerformed(ActionEvent e){subAction.actionPerformed(e); }}' –
@ SunLightGirl99你为什么要发起一个动作?通常情况下,您希望执行此操作或希望Java Swing执行此操作,以便将此操作异步处理到Swing-GUI。但是在你的第一个actionListener中,你已经与你的gui异步了 - 那么直接调用第二个actionListener的方法有什么问题?我认为没有必要直接调用该方法来触发一个动作! –
那么您可以在ActionListener中以任何顺序使用方法调用。 – Lemonov
创建第三个“Action”,它引用“Action1”和“Action2”,将第三个“Action”应用于按钮。被触发时,它会按照你想要的顺序调用“Action1”和“Action2” – MadProgrammer
我看到你是新来的SO 如果你觉得答案解决了这个问题,请点击绿色检查标记为“接受”标记。这有助于将重点放在仍然没有答案的旧帖子上。 –