Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which mouse button is the middle one?

Tags:

I'm currently developing a program in Java where a certain event must be triggered only when the user clicks with both the left and the right click on a button.

Since it is a little unconventional, I decided to first test this. Here it is:

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

I tested it and it works, but there is a problem.

As you can see, the left mouse button is represented by MouseEvent.BUTTON1 and the right mouse button by MouseEvent.BUTTON3.

If the user has a mouse which doesn't have a scroll wheel (apparently such mice still exist), then only two buttons are set in MouseEvent. Does that mean that the right button will be represented by MouseEvent.BUTTON2 instead of MouseEvent.BUTTON3? If yes, how can I change my code to accomodate this? Is there any way I can detect something like this?

I read anything I could find on the MouseListener interface and on MouseEvent, but I couldn't find something about this.

like image 713
Radu Murzea Avatar asked Jan 23 '12 13:01

Radu Murzea


2 Answers

To determine which of the Mouse buttons is pressed, these three methods from SwingUtilities could help you:

  1. isLeftMouseButton
  2. isMiddleMouseButton
  3. isRightMouseButton
like image 73
mKorbel Avatar answered Oct 07 '22 18:10

mKorbel


You can use the utilities methods from SwingUtilties:

SwingUtilities.isLeftMouseButton(MouseEvent anEvent)    SwingUtilities.isRightMouseButton(MouseEvent anEvent)  SwingUtilities.isMiddleMouseButton(MouseEvent anEvent) 
like image 25
Alex Avatar answered Oct 07 '22 18:10

Alex