java同时按下两个鼠标按钮无法正常工作
我必须检查我是否按下了鼠标左键、右键或两个按钮,下面是一个示例代码:
package sandbox;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Sandbox extends JFrame {
public static void main(String[] args) {
Sandbox s = new Sandbox();
s.setVisible(true);
}
public Sandbox() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300, 200);
setResizable(false);
setTitle("Frame");
setLayout(null);
JButton but = new JButton("click me");
but.setBounds(0, 0, 120, 50);
but.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
if(SwingUtilities.isLeftMouseButton(e) | SwingUtilities.isRightMouseButton(e))
System.out.println("both");
else if(SwingUtilities.isLeftMouseButton(e))
System.out.println("left");
else if(SwingUtilities.isRightMouseButton(e))
System.out.println("right");
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
add(but);
}
}
我必须使用SwingUtilities,但如果我按下左或右单键,它将打印“两者”,而不是“左”或“右”,如果我使用MouseeEvent类,它工作正常,但如果可能,我需要使用SwingUtilities类,谢谢
编辑:使用MouseeEvent类它工作正常:
if(e.getModifiersEx() == (MouseEvent.BUTTON1_DOWN_MASK | MouseEvent.BUTTON3_DOWN_MASK))
...
# 1 楼答案
不要检查using OR(
|
),而是使用AND(&
或更好的快捷版本&&
):更新:
为了检查两个按钮是否都按下,
SwingUtilities
似乎不是正确的工具。isXxxxMouseButton(...)
方法的作用与您的相同,它们检查按钮掩码,但使用不同的掩码,当两个按钮都按下时,似乎无法设置这些掩码例如,
isRightMouseButton()
实现如下:正如您所见,实现并没有那么复杂,所以您最好自己进行掩码检查
# 2 楼答案
按钮上的鼠标列表事件
鼠标监听事件的名声
请与
'||' not '|'
联系,不要使用&&;因为不可能同时按下两个按钮你会得到结果的