将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?但我没有看到任何消耗该事件的代码。
答案 0 :(得分:3)
MouseEvent
由Container
在多个点自动消耗,原因有很多(一些与本地对等方需要处理事件有关)... < / p>
最值得注意的是private
方法Container#processMouseEvent
,但可以在此之前使用
这基本上意味着,当您将MouseListener
附加到任何组件时,它将消耗所有鼠标事件,这些事件将发送到它所在的任何组件(或其中的一部分)。
想想像雨一样的鼠标事件。当雨滴袭击某物时,它会停止。