7

我想实现一种用户需要同时按住鼠标左键和右键的方法。

我正在使用 Swing 和 Java 1.7。我已经尝试过了,但它没有像我期望的那样检测到两个按钮的情况:

public void mousePressed(MouseEvent e) {    
     if (SwingUtilities.isLeftMouseButton(e) && SwingUtilities.isRightMouseButton(e)){
              ///code here
     }
}

我试图分离方法并使用布尔值来决定是否按下鼠标按钮,然后我设置一个条件来确定它们是否同时被按下,但这也可以解决..

4

2 回答 2

6

这是一个 SSCCE,可以满足您的需求……即,如果我正确理解了您的问题。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class StackOverflow15957076 extends MouseAdapter
{
    private JLabel status;

    private boolean isLeftPressed;
    private boolean isRightPressed;

    public StackOverflow15957076 ()
    {
        JFrame frame = new JFrame ();
        frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);

        JPanel panel = new JPanel (new FlowLayout (FlowLayout.CENTER));

        status = new JLabel ("waiting for both mouse buttons...");

        status.addMouseListener (this);

        panel.add (status);

        frame.add (panel);

        frame.pack ();
        frame.setVisible (true);

        isLeftPressed = false;
        isRightPressed = false;
    }

    @Override
    public void mousePressed (MouseEvent e)
    {
        if (SwingUtilities.isLeftMouseButton (e))
        {
            isLeftPressed = true;
        }
        else if (SwingUtilities.isRightMouseButton (e))
        {
            isRightPressed = true;
        }

        if (isLeftPressed && isRightPressed)
        {
            status.setText ("both buttons are pressed");
        }
    }

    @Override
    public void mouseReleased (MouseEvent e)
    {
        if (SwingUtilities.isLeftMouseButton (e))
        {
            isLeftPressed = false;
        }
        else if (SwingUtilities.isRightMouseButton (e))
        {
            isRightPressed = false;
        }

        status.setText ("waiting for both mouse buttons...");
    }

    public static void main (String[] args)
    {
        SwingUtilities.invokeLater (new Runnable ()
        {
            @Override
            public void run ()
            {
                new StackOverflow15957076 ();
            }
        });
    }
}
于 2013-04-11T19:32:32.697 回答
1

似乎不可能直接这样做,因为鼠标事件是按顺序触发的。例如,请参阅此 SO question/answers

因此,您需要确定“同时”对您的实际意义(即时间应该有多接近)。然后您可以捕获两个单独的事件并比较它们的getWhen()值。

于 2013-04-11T19:38:33.453 回答