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.
To determine which of the Mouse buttons is pressed, these three methods from SwingUtilities could help you:
You can use the utilities methods from SwingUtilties:
SwingUtilities.isLeftMouseButton(MouseEvent anEvent) SwingUtilities.isRightMouseButton(MouseEvent anEvent) SwingUtilities.isMiddleMouseButton(MouseEvent anEvent)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With