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)
- Crea un nuevo
proyecto.
- Dentro
de Source Package crea un Java Package y
llamalo paqueteInicial.
- Dentro
de paqueteInicial crea un JFrame Form y
nombralo VentanaInicial
- No hace falta
que añada nada a la VentanaInicial.
- 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.
- 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.
- Dentro del
evento programe lo siguiente:
if (evt.getButton()
== 1) {
JOptionPane.showMessageDialog(null, "Hizo Clic Izquierdo.");
} else if (evt.getButton()
== 2) {
} else if (evt.getButton()
== 3) {
JOptionPane.showMessageDialog(null, "Hizo Clic Derecho.");
}
- Ejecuta el
programa y haz clic sobre el formulario con el botón derecho, con el
izquierdo y con el central. Observa el resultado.
- 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.
- 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ú.
- Agrega a tu
formulario un objeto del tipo JPopupMenu.
Estos objetos definen menús emergentes.
- Los objetos JPopupMenu
no se muestran en el formulario, pero puedes verlo en el Inspector
dentro de la rama de Otros Componentes:
- Aprovecharemos
el inspector para cambiar el nombre al menú. Llámalo mnuEmergente.
- 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.
- 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:
- 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”.
- 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());
}
- 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.
- Ejecuta el proyecto
y observa el resultado.
Al hacer clic derecho se mostrará el
menú contextual.
- 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);
- 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