Какая кнопка мыши является средней? - PullRequest
23 голосов
/ 23 января 2012

В настоящее время я разрабатываю программу на Java, в которой определенное событие должно вызываться только тогда, когда пользователь нажимает левую и правую кнопки мыши.

Поскольку это немного нетрадиционно, ярешил сначала проверить это.Вот оно:

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;

public class GUI
{
    private JFrame mainframe;
    private JButton thebutton;

    private boolean left_is_pressed;
    private boolean right_is_pressed;

    private JLabel notifier;

    public GUI ()
    {
        thebutton = new JButton ("Double Press Me");
        addListen ();
        thebutton.setBounds (20, 20, 150, 40);

        notifier = new JLabel (" ");
        notifier.setBounds (20, 100, 170, 20);

        mainframe = new JFrame ("Double Mouse Tester");
        mainframe.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
        mainframe.setResizable (false);
        mainframe.setSize (400, 250);

        mainframe.setLayout (null);

        mainframe.add (thebutton);
        mainframe.add (notifier);

        mainframe.setVisible (true);

        left_is_pressed = right_is_pressed = false;
    }

    private void addListen ()
    {
        thebutton.addMouseListener (new MouseListener ()
        {
            @Override public void mouseClicked (MouseEvent e) { }
            @Override public void mouseEntered (MouseEvent e) { }
            @Override public void mouseExited (MouseEvent e) { }

            @Override public void mousePressed (MouseEvent e)
            {
                //If left button pressed
                if (e.getButton () == MouseEvent.BUTTON1)
                {
                    //Set that it is pressed
                    left_is_pressed = true;

                    if (right_is_pressed)
                    {
                        //Write that both are pressed
                        notifier.setText ("Both pressed");
                    }

                }
                //If right button pressed
                else if (e.getButton () == MouseEvent.BUTTON3)
                {
                    //Set that it is pressed
                    right_is_pressed = true;

                    if (left_is_pressed)
                    {
                        //Write that both are pressed
                        notifier.setText ("Both pressed");
                    }
                }
            }

            @Override public void mouseReleased (MouseEvent e)
            {
                //If left button is released
                if (e.getButton () == MouseEvent.BUTTON1)
                {
                    //Set that it is not pressed
                    left_is_pressed = false;

                    //Remove notification
                    notifier.setText (" ");
                }
                //If right button is released
                else if (e.getButton () == MouseEvent.BUTTON3)
                {
                    //Set that it is not pressed
                    right_is_pressed = false;

                    //Remove notification
                    notifier.setText (" ");
                }
            }
        });
    }
}

Я проверил это, и оно работает, но есть проблема.

Как вы можете видеть, левая кнопка мыши представлена ​​MouseEvent.BUTTON1, а правая -кнопка мыши на MouseEvent.BUTTON3.

Если у пользователя есть мышь, у которой нет колеса прокрутки (по-видимому, такие мыши все еще существуют), то в MouseEvent установлены только две кнопки.Означает ли это, что правая кнопка будет представлена ​​MouseEvent.BUTTON2 вместо MouseEvent.BUTTON3?Если да, как я могу изменить свой код, чтобы приспособиться к этому?Есть ли способ, как я могу обнаружить что-то подобное?

Я прочитал все, что я мог найти в интерфейсе MouseListener и MouseEvent, но я не смог найти что-то об этом.

Ответы [ 3 ]

30 голосов
/ 23 января 2012

Чтобы определить, какая из кнопок мыши нажата, вам могут помочь следующие три метода из SwingUtilities :

  1. isLeftMouseButton
  2. isMiddleMouseButton
  3. isRightMouseButton
13 голосов
/ 23 января 2012

Вы можете использовать методы утилит из SwingUtilties :

SwingUtilities.isLeftMouseButton(MouseEvent anEvent)   
SwingUtilities.isRightMouseButton(MouseEvent anEvent) 
SwingUtilities.isMiddleMouseButton(MouseEvent anEvent)
0 голосов
/ 23 января 2012

Существует также MouseEvent.isPopupTrigger().Этот метод должен возвращать true, если нажата правая кнопка мыши.

...