temen similitudes ratones raton ratas rata que por las laboratorio humanos humano entre donde comportamiento comparacion casa caracteristicas cabe java swing mouse mouseevent mouselistener

java - similitudes - ¿Qué botón del ratón es el del medio?



ratones en casa (3)

Para determinar cuál de los botones del Mouse se presiona, estos tres métodos de SwingUtilities podrían ayudarlo a:

  1. isLeftMouseButton
  2. isMiddleMouseButton
  3. isRightMouseButton

Actualmente estoy desarrollando un programa en Java donde un determinado evento debe activarse solo cuando el usuario hace clic con el botón izquierdo y derecho en un botón.

Como es poco convencional, decidí probarlo primero. Aquí está:

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

Lo probé y funciona, pero hay un problema.

Como puede ver, el botón izquierdo del mouse está representado por MouseEvent.BUTTON1 y el botón derecho del mouse por MouseEvent.BUTTON3 .

Si el usuario tiene un mouse que no tiene una rueda de desplazamiento (aparentemente esos ratones aún existen), solo se configuran dos botones en MouseEvent. ¿Eso significa que el botón derecho estará representado por MouseEvent.BUTTON2 lugar de MouseEvent.BUTTON3 ? En caso afirmativo, ¿cómo puedo cambiar mi código para acomodar esto? ¿Hay alguna manera de que pueda detectar algo como esto?

Leí todo lo que pude encontrar en la interfaz de MouseListener y en MouseEvent, pero no pude encontrar nada al respecto.


Puede usar los métodos de utilidades de SwingUtilities :

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


También hay MouseEvent.isPopupTrigger() . Este método debería devolver verdadero, si se presiona el botón derecho del mouse.