lunes, 22 de febrero de 2016

014.- Uso de Menus Emergentes (JPopupMenu) - Java y NetBeans


Voy a explicar cómo usar los Menús Emegentes (JPopupMenu):

Empecemos analizando el evento mouseClicked; el evento mouseClicked es capaz de capturar un clic del ratón sobre un determinado elemento de la ventana.

Este evento recibe como parámetro un objeto del tipo MouseEvent, y gracias a él se puede conseguir información como la siguiente:

-        Cuál botón del ratón fue pulsado.
-        Cuantas veces fue pulsado (clic, doble clic, etc)
-        En cuáles coordenadas fue pulsado el botón.
-        Etc.

Se puede usar esta información para saber por ejemplo si se pulsó el botón derecho del ratón, y hacer que se muestre un menú contextual llamado también menú emergente en pantalla.

En el siguiente ejercicio estudiaremos las posibilidades del evento mouseClicked y se aplicará a la creación y visualización de menús contextuales (o emergentes)


  1. Crea un nuevo proyecto.

  1. Dentro de Source Package crea un Java Package y llamalo paqueteInicial.

  1. Dentro de paqueteInicial crea un JFrame Form y nombralo VentanaInicial

  1. No hace falta que añada nada a la VentanaInicial.

  1. Programaremos la pulsación del ratón sobre el formulario, así que haga clic derecho sobre el formulario e ingresa a programar en el evento mouseClicked.



  1. Observe el código del evento:

private void formMouseClicked(java.awt.event.MouseEvent evt) {                                 
        // TODO add your handling code here:
}   


Este evento recibe como parámetro un objeto llamado evt del tipo MouseEvent (en rojo en el código) que nos permite saber datos de las condiciones en que se hizo clic.


  1. Dentro del evento programe lo siguiente:

if (evt.getButton() == 1) {
    JOptionPane.showMessageDialog(null, "Hizo Clic Izquierdo.");
} else if (evt.getButton() == 2) {
    JOptionPane.showMessageDialog(null, "Pulsó el Botón Central.");
} else if (evt.getButton() == 3) {
    JOptionPane.showMessageDialog(null, "Hizo Clic Derecho.");
}


  1. Ejecuta el programa y haz clic sobre el formulario con el botón derecho, con el izquierdo y con el central. Observa el resultado.

  1. Ahora quizás puedas comprender el código anterior. En él, se usa el método getButton del objeto evt para saber qué botón se pulsó. El método getButton devuelve un entero que puede ser 1, 2 o 3 según el botón pulsado.


  1. Se puede aprovechar el método getButton para saber cuando se pulsa botón derecho del ratón y así mostrar un menú contextual. Pero antes, es necesario crear el menú.

  1. Agrega a tu formulario un objeto del tipo JPopupMenu. Estos objetos definen menús emergentes.

  1. Los objetos JPopupMenu no se muestran en el formulario, pero puedes verlo en el Inspector dentro de la rama de Otros Componentes:



  1. Aprovecharemos el inspector para cambiar el nombre al menú. Llámalo mnuEmergente.

  1. Los menús emergentes se crean igual que las opciones de menús normales, agregamos con el botón derecho del ratón objetos JMenuItem.

  1. Añada al menú emergente tres JMenuItem, y asígneles los siguientes nombres a cada uno: mnuRojo, mnuVerde, mnuAzul. El inspector debería tener el siguiente aspecto:



  1. Tienes que cambiar la propiedad text de cada opción del menú. Recuerda que esta propiedad define lo que aparece en el menú. Asignarás los siguientes textos: “Rojo”, “Verde” y “Azul”.

  1. El menú emergente ya está construido. Ahora tenemos que hacer que aparezca cuando el usuario pulse el botón derecho del ratón sobre el formulario. Para ello, entramos de nuevo en el evento mouseClicked del formulario y cambiaremos su código por el siguiente:

        if (evt.getButton() == 3) {
            mnuEmergente.show(this, evt.getX(), evt.getY());
        }


  1. Explicación del código anterior:

-        En primer lugar verificamos que el botón pulsado a sido el derecho; esto sucede si el método getButton() del objeto evt es igual a 3.
-        El método show le da la orden al mnuEmergente para que se muestre.
-        El método show requiere de tres argumentos: por un lado la ventana donde actúa (this).
-        Por otro lado la posición x donde debe mostrarse el menú. Esta posición es aquella donde se pulsó el ratón, y se puede conseguir gracias al método getX del objeto evt.
-        Por último se necesita la posición y. Esta posición se puede conseguir gracias al método getY del objeto evt.

Es decir, decidimos mostrar el menú emergente justo en las coordenadas donde se hizo clic.


  1. Ejecuta el proyecto y observa el resultado.



         Al hacer clic derecho se mostrará el menú contextual.

  1. Para hacer que al pulsarse una opción suceda algo, solo hay que programar en el evento actionPerformed del JMenuItem correspondiente. Por ejemplo, active el actionPerformed del mnuRojo y dentro codifique lo siguiente:

this.getContentPane().setBackground(Color.red);


  1. Ejecuta el proyecto y comprueba lo que sucede al pulsar la opción Rojo del menú contextual.

 



CONCLUSIÓN:

Los menús contextuales son objetos del tipo JPopupMenu. Estos objetos contienen JMenuItem al igual que las opciones de menú normales.

Cuando se asigna un JPopupMenu a un formulario, no aparece sobre la ventana, pero sí en el inspector.

Para hacer que aparezca el menú emergente, es necesario programar el evento mouseClicked del objeto sobre el que quiera que aparezca el menú.

Tendrá que usar el método show del menú emergente para mostrar dicho menú indicando para ello el objeto donde aparecerá con sus respectivas coordenadas X, Y.


No hay comentarios.:

Publicar un comentario