java swing 按住两个鼠标按钮

标签 java swing mouselistener mouseleftbuttondown right-mouse-button

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

我使用的是 Swing 和 Java 1.7。我试过这个,但它没有像我期望的那样检测到双按钮的情况:

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

我尝试分离方法并使用 bool 值来确定是否按下了鼠标按钮,然后我设置了一个条件来确定是否同时按下了这两个按钮,但这也没有成功..

最佳答案

这是一个 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 ();
            }
        });
    }
}

关于java swing 按住两个鼠标按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15957076/

相关文章:

java - 访问 JTableHeader 中的 JTextField

java - 同时注册MouseListener和MouseMotionListener

javascript - 用鼠标移动浏览器

java - 在 Java 中阻止 Final block 执行的有效命令

java - Android Studio LibGDX 游戏不显示障碍物和地板

java - 如何将变量从主方法类转移到另一个类?

java - 从另一个线程更新 JLabel,而无需分离线程上的所有进程?

java - 三层架构 : Must Exception dependencies between layers be avoided?

如果未选中 CheckBoxMenuItem,Java 退出 MouseListener

java - Java中的String为什么是不可变的对象,但我在创建一个对象后仍然可以更改它的值?