有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java swing按住两个鼠标按钮

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

我正在使用Swing和Java1.7。我尝试过这个,但它没有检测到两个按钮的情况下,我希望它:

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

我尝试分离方法,并使用布尔值来确定是否按下鼠标按钮,然后设置一个条件以确定是否同时按下这两个按钮,但这也不起作用


共 (2) 个答案

  1. # 1 楼答案

    似乎不可能直接执行,因为鼠标事件是按顺序触发的。例如,见this SO question/answers

    因此,你需要决定“同时对你来说意味着什么”(即时间应该有多近)。然后可以捕获两个单独的事件并比较它们的getWhen()

  2. # 2 楼答案

    这是一个你想做什么就做什么的SSCCE。。。i、 如果我正确理解了你的问题

    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 ();
                }
            });
        }
    }