为JToolBar添加MouseListener(消耗事件?)

时间:2013-09-19 04:02:30

标签: java swing mouseevent mouse-listeners jtoolbar

将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());
        }
    }
}

点击抓手时会触发该事件。

所以我的问题是,为什么?是否在dockingListener中使用了MouseEvent?但我没有看到任何消耗该事件的代码。

1 个答案:

答案 0 :(得分:3)

MouseEventContainer在多个点自动消耗,原因有很多(一些与本地对等方需要处理事件有关)... < / p>

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

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

想想像雨一样的鼠标事件。当雨滴袭击某物时,它会停止。