我必须检查我的鼠标左键,右键或两键是否按下了,这是一个示例代码:
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制作它,但是如果我按左或右单按钮它将打印“两个”,而不是“左”或“右”,如果我使用MouseEvent类它工作正常但是有问题但是如果有可能,我需要使用SwingUtilities类,谢谢。
编辑:使用MouseEvent类它正常工作:
if(e.getModifiersEx() == (MouseEvent.BUTTON1_DOWN_MASK | MouseEvent.BUTTON3_DOWN_MASK))
...
答案 0 :(得分:2)
不要使用OR(|
)进行检查,而是使用AND(&
或更好的快捷版&&
)代替:
if(SwingUtilities.isLeftMouseButton(e) && SwingUtilities.isRightMouseButton(e))
...
<强>更新强>:
要检查是否按下了两个按钮,SwingUtilities
似乎不是正确的工具。 isXxxxMouseButton(...)
方法与您的方法相同,它们检查按钮蒙版,但使用不同的蒙版,当按下两个按钮时,这些蒙版看起来都没有设置。
例如,isRightMouseButton()
实现如下:
public static boolean isRightMouseButton(MouseEvent anEvent) {
return ((anEvent.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK);
}
正如你所看到的,实现不是那个补充文件,所以你最好自己做掩码检查。
答案 1 :(得分:1)
按钮上的鼠标监听事件
but.addMouseListener(new MouseListener() {
成名的小鼠监听器事件。
this.addMouseListener(new MouseListener() {
请与'||' not '|'
核实,不要使用&amp;&amp;因为无法同时按下两个按钮
if(SwingUtilities.isLeftMouseButton(e) || SwingUtilities.isRightMouseButton(e))
您将获得结果
both
left
both
left
both
right