因此,在提供的代码中,我使用两个接口(即 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
我假设您实际上正在使用 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());
}
首先,您可以实现 MouseInputListener 接口,该接口可以方便地实现 MouseListener 和 MouseMotionListener。
关于您的询问,这里有类似的问答。
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 教程,关于实现 鼠标监听器 和 鼠标运动监听器。