说到事件,我绝对来自ActionScript背景。我目前正在使用Swing开发一个项目,我需要从一个对象调度一个事件并在父项中捕获事件,我不知道该怎么做。
在ActionScript3中,您可以使用dispatchEvent调用调度事件。例如,假设我想以编程方式调度mouseClick事件(即使未单击鼠标),以便激活其他一些侦听器。我可以通过使用
来做到这一点dispatchEvent(MouseEvent.Click);
一旦调用它,事件将通过它的父对象冒泡,直到它到达顶部,并且事件侦听器可以在途中捕获它。 (从技术上讲,它会起泡和倒退,但我认为这超出了问题的范围)。所以如果我想在父对象中监听那个mouseClick事件,我只想添加一个这样的监听器:
parent.addEventListener(MouseEvent.Click, Function);
将捕获该mouseClick并执行该功能。
这就是它在ActionScript3中的工作原理。我正在尝试用Java做类似的事情,似乎在Java事件的工作方式上有一些重大的理论变化。我怎么在java中做同样的事情?具体来说,如何以编程方式调度事件并在父对象中捕获该事件?
我已经对这个问题做了自己的研究,它只是让我更加困惑。我看过了:
答案 0 :(得分:0)
对于以编程方式触发事件,如果您在按钮之外,请查看AbstractButton.doClick()
,或者最好在子类中AbstractButton.fireActionPerformed()
。
在开发组件时,缺少冒泡意味着每个父组件都需要处理并重新调度子组件事件:
innerButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent buttonEvent) {
MyEvent myEvent = ... // process buttonEvent
fireMyEventHappened(myEvent);
}
});
答案 1 :(得分:0)
Component
类有一个dispatchEvent(...)
方法,因此您可以直接为任何组件创建和分发事件。
或者如果您想手动生成OS事件,那么您可以使用Robot
类,Java将为您调度事件。在这种情况下