为什么我不能只使用MouseAdapter,而不能使用MouseMotionAdapter?

时间:2019-04-07 06:35:56

标签: java mouseevent

我的应用程序窗口可以通过拖动其菜单栏来移动。 但是,我不明白为什么必须使用MouseMotionAdapter()来实现此功能。

两个类都具有方法:mouseDragged(),所以我擦除了MouseMotionAdapter并将函数移到MouseAdapter()中。我不能再拖动窗口了。为什么?

此代码完美运行。

menuBar.addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {
            mouseX = e.getX();
            mouseY = e.getY();
        }
});

    //마우스로 매뉴를 잡고 움직일 수 있게 해주는 코드.
menuBar.addMouseMotionListener(new MouseMotionAdapter(){
        @Override
        public void mouseDragged(MouseEvent e) {
            int x = e.getXOnScreen();
            int y = e.getYOnScreen();
            setLocation(x - mouseX, y - mouseY);
        }
});

但是,这不是

menuBar.addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {
            mouseX = e.getX();
            mouseY = e.getY();
        }

        @Override
        public void mouseDragged(MouseEvent e) {
            int x = e.getXOnScreen();
            int y = e.getYOnScreen();
            setLocation(x - mouseX, y - mouseY);
        }       
});

感谢您的支持

1 个答案:

答案 0 :(得分:2)

可以仅使用MouseAdapter,但是您必须调用addMouseMotionListener,以便将鼠标运动事件发送给它。

MouseAdapter ma = new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
        mouseX = e.getX();
        mouseY = e.getY();
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        int x = e.getXOnScreen();
        int y = e.getYOnScreen();
        setLocation(x - mouseX, y - mouseY);
    }
});
menuBar.addMouseListener(ma);
menuBar.addMouseMotionListener(ma);

只有向addMouseMotionListener注册的侦听器将被发送鼠标移动事件,例如拖动。

来自MouseAdapter docs

  

使用扩展类创建一个侦听器对象,然后使用组件的addMouseListeneraddMouseMotionListeneraddMouseWheelListener方法向该组件注册。