如何以编程方式调度事件以便被Java中的另一个对象捕获?

时间:2014-05-03 02:19:04

标签: java swing events

说到事件,我绝对来自ActionScript背景。我目前正在使用Swing开发一个项目,我需要从一个对象调度一个事件并在父项中捕获事件,我不知道该怎么做。

在ActionScript3中,您可以使用dispatchEvent调用调度事件。例如,假设我想以编程方式调度mouseClick事件(即使未单击鼠标),以便激活其他一些侦听器。我可以通过使用

来做到这一点
dispatchEvent(MouseEvent.Click);

一旦调用它,事件将通过它的父对象冒泡,直到它到达顶部,并且事件侦听器可以在途中捕获它。 (从技术上讲,它会起泡和倒退,但我认为这超出了问题的范围)。所以如果我想在父对象中监听那个mouseClick事件,我只想添加一个这样的监听器:

parent.addEventListener(MouseEvent.Click, Function);

将捕获该mouseClick并执行该功能。

这就是它在ActionScript3中的工作原理。我正在尝试用Java做类似的事情,似乎在Java事件的工作方式上有一些重大的理论变化。我怎么在java中做同样的事情?具体来说,如何以编程方式调度事件并在父对象中捕获该事件?

我已经对这个问题做了自己的研究,它只是让我更加困惑。我看过了:

2 个答案:

答案 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将为您调度事件。在这种情况下