Java AWT:MouseMotionListener 无法区分鼠标按钮

问题描述 投票:0回答:2

因此,在提供的代码中,我使用两个接口(即 MouseListener 和 MouseMotionListener)打印按下的按钮类型。如何使 MouseMotionListener 的 mouseDragged 方法像 MouseListener 的 MousePressed 方法一样区分按钮类型?

下面是代码,后面是控制台输出。

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

class Mouse extends Frame implements MouseMotionListener, MouseListener {
    Label l;
    Color color = Color.red;

    public Mouse() {
        l = new Label();
        l.setBounds(20, 40, 100, 20);
        add(l);

        addMouseListener(this);
        addMouseMotionListener(this);
        setSize(400, 400);
        setLayout(null);
        setVisible(true);

    }

    public void mouseDragged(MouseEvent e) {
        System.out.println("MouseMotionListener:"+e.getButton());
        l.setText("X=" + e.getX() + " Y=" + e.getY());
    }
    @Override
    public void mousePressed(MouseEvent e) {
        System.out.println("MouseListener:"+e.getButton());
    }

    public void mouseMoved(MouseEvent e) {
        l.setText("X=" + e.getX() + " Y=" + e.getY());
    }

    @Override
    public void mouseClicked(MouseEvent e) {
    }


    @Override
    public void mouseReleased(MouseEvent e) {
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }

}

输出:

MouseListener:1
MouseListener:1
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseListener:2
MouseListener:2
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseListener:3
MouseListener:3
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
MouseMotionListener:0
java user-interface awt
2个回答
1
投票

我假设您实际上正在使用 Swing(因为不需要使用 AWT)。

您可以使用

SwingUtilities
类来检查按下了哪个按钮:

public void mouseDragged(MouseEvent e) {
    System.out.println( SwingUtilities.isLeftMouseButton(e) );
    System.out.println("MouseMotionListener:"+e.getButton());
    l.setText("X=" + e.getX() + " Y=" + e.getY());
}

0
投票

首先,您可以实现 MouseInputListener 接口,该接口可以方便地实现 MouseListenerMouseMotionListener

关于您的询问,这里有类似的问答。
StackOverflow – mouseDragged 未返回适当的按钮按下

看起来框架建议在这种情况下使用 SwingUtilities 类。

具体有以下3种方法。

这是一个例子。

public void mouseDragged(MouseEvent e) {
    System.out.println("l= " + SwingUtilities.isLeftMouseButton(e));
    System.out.println("m= " + SwingUtilities.isMiddleMouseButton(e));
    System.out.println("r= " + SwingUtilities.isRightMouseButton(e));
    l.setText("X=" + e.getX() + " Y=" + e.getY());
}

输出

MouseListener:1
l= true
m= false
r= false
MouseListener:3
l= false
m= false
r= true

此外,这里有两个 Java 教程,关于实现 鼠标监听器鼠标运动监听器

© www.soinside.com 2019 - 2024. All rights reserved.