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



说到事件,我肯定来自ActionScript背景。我目前正在使用Swing处理一个项目,其中我需要从一个对象调度事件并在父对象中捕获事件,我不知道如何做到这一点。

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

dispatchEvent(MouseEvent.Click);

一旦被调用,事件将通过它的父对象向上冒泡,直到到达顶部,事件侦听器可以在此过程中捕获它。(从技术上讲,它会下降并回升,但我相信这超出了问题的范围)。如果我想监听父对象中的mouseClick事件,我只需添加这样一个监听器:

parent.addEventListener(MouseEvent.Click, Function);

它将捕获mouseClick并执行Function

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

我对这个问题做了自己的研究,它只会让我更加困惑。我看过:
  • 我如何编程发送ActionEvent到JButton?
  • Swing中的并发——事件调度线程。
  • 事件和监听器——如何创建自定义事件?

对于以编程方式触发事件,如果您在按钮外部,请查看AbstractButton.doClick(),或者最好是子类中的AbstractButton.fireActionPerformed()

在开发组件时,缺少冒泡意味着每个父组件都需要处理和重新分配子组件事件:

innerButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent buttonEvent) {
        MyEvent myEvent = ... // process buttonEvent
        fireMyEventHappened(myEvent);
    }
});

Component类有一个dispatchEvent(...)方法,所以你可以直接创建和分派一个事件给任何组件。

或者如果你想手动生成一个OS事件,那么你可以使用Robot类,Java将为你完成事件的调度。在本例中

相关内容

最新更新