1

将 MouseListener 添加到 JToolBar 时,

jToolbar.addMouseListener(new MouseInputAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        log.debug(e.getPoint());
    }
});

该事件仅在 JToolBar 的抓取器外部单击时触发。

如果我覆盖 BasicToolBarUI 的 createDockingListener():

@Override
protected MouseInputListener createDockingListener() {
    return new MouseInputAdapter() {
        @Override
        public void mousePressed(MouseEvent evt) {
            log.debug(e.getPoint());
        }
    }
}

单击夹具时将触发该事件。

所以我的问题是,为什么?停靠监听器中是否消耗了 MouseEvent?但我没有看到任何消耗该事件的代码。

4

1 回答 1

3

由于许多不同的原因(一些与本机对等点需要如何处理事件有关),它在许多点上MouseEvent被自动消耗......Container

最值得注意的是private方法Container#processMouseEvent,但在此之前可以使用它

这基本上意味着,当您将 a 附加MouseListener到任何组件时,它将消耗所有鼠标事件到它驻留在上面的任何组件(或其部分)。

想想像下雨这样的鼠标事件。当雨滴碰到某物时,它会停下来。

于 2013-09-19T04:27:04.393 回答