it-swarm.com.de

Welche Maustaste ist die mittlere?

Ich entwickle gerade ein Programm in Java, bei dem ein bestimmtes Ereignis nur ausgelöst werden muss, wenn der Benutzer mit der linken und rechten Maustaste auf eine Schaltfläche klickt.

Da es etwas unkonventionell ist, habe ich mich entschlossen, dies zuerst zu testen. Hier ist es:

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

Ich habe es getestet und es funktioniert, aber es gibt ein Problem.

Wie Sie sehen, wird die linke Maustaste durch MouseEvent.BUTTON1 und die rechte Maustaste durch MouseEvent.BUTTON3 dargestellt.

Wenn der Benutzer eine Maus hat, die kein Mausrad hat (anscheinend gibt es noch solche Mäuse), werden in MouseEvent nur zwei Schaltflächen festgelegt. Bedeutet das, dass die rechte Schaltfläche durch MouseEvent.BUTTON2 anstelle von MouseEvent.BUTTON3 dargestellt wird? Wenn ja, wie kann ich meinen Code ändern, um dies zu berücksichtigen? Kann ich so etwas auf irgendeine Weise erkennen?

Ich habe alles gelesen, was ich auf der MouseListener-Oberfläche und in MouseEvent finden konnte, aber ich konnte nichts dazu finden.

23
Radu Murzea

Um herauszufinden, welche der Maustasten gedrückt wird, könnten Ihnen diese drei Methoden aus SwingUtilities helfen:

  1. isLeftMouseButton
  2. isMiddleMouseButton
  3. isRightMouseButton
30
mKorbel

Sie können die Dienstprogrammmethoden aus SwingUtilties verwenden:

SwingUtilities.isLeftMouseButton(MouseEvent anEvent)   
SwingUtilities.isRightMouseButton(MouseEvent anEvent) 
SwingUtilities.isMiddleMouseButton(MouseEvent anEvent)
13
Alex

Es gibt auch MouseEvent.isPopupTrigger(). Diese Methode sollte true zurückgeben, wenn die rechte Maustaste gedrückt wird.

0
henrik