按两个鼠标按钮不能正常工作

时间:2014-04-24 08:39:51

标签: java swing

我必须检查我的鼠标左键,右键或两键是否按下了,这是一个示例代码:

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))
...

2 个答案:

答案 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