简体   繁体   English

当组件设置为可见时,为什么MouseMotionListener的mouseMoved方法会生成事件?

[英]Why MouseMotionListener's mouseMoved method generates event when component is set to visible?

I have added MouseMotionListener to Component, about 5 parents above. 我已将MouseMotionListener添加到Component中,大约有5个以上的父级。 When I set main JWindow setVisible(true); 当我设置主JWindow setVisible(true); , then immediately mouseMoved(MouseEvent e) method generates one event. ,然后mouseMoved(MouseEvent e)方法立即生成一个事件。 After that everything works fine. 之后,一切正常。 Could it be some bug? 可能是一些错误吗?

Some solution is possible: 一些解决方案是可能的:

public class SomeClass extends Component{

   private int mouseMoveCount;

   public SomeClass(){

   addMouseMotionListener(new MouseMotionAdapter() {
                @Override
                public void mouseMoved(MouseEvent e) {

                    if (mouseMoveCount > 1) {
                        //Do something
                        mouseMoveCount = 0;
                    }
                    mouseMoveCount++;
                }
            });
    }
}

jWindow.setVisible(true); is done after validate(); validate();之后完成validate(); and pack(); pack(); . Mouse, of course sits in place, I do not touch it :) But it still generates one event.. 鼠标当然就位,我不触摸它:)但是它仍然会产生一个事件。

Finally found the reason - before setting to visible, I was dispatching MouseEvent ( MouseEvent.MOUSE_ENTERED ) to Component MouseListener - it was a mistake. 终于找到了原因-在设置为可见之前,我正在将MouseEventMouseEvent.MOUSE_ENTERED )分派给Component MouseListener这是一个错误。 But interesting to know, that dispatching this event also triggered mouseMoved . 但有趣的是,调度此事件也触发了mouseMoved

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM