Crear un Frame con menú (Parte 4)

    Ahora que ya vimos un ejemplo de como crear un Frame con una barra de menú, voy a explicar de forma sencilla como hacer para que los menús o items seleccionados en la barra funcionen.

    Para lograr esto, habiamos dicho que esta libreria trabaja con eventos, esto esta explicado en la primera parte de "Como crear un Frame con menú". Estos eventos se manejan por condiciones sencillas de "if and else", las cuales también se explicaron en entradas anteriores.

    Primero debemos declarar el método que contendra los eventos que generara nuestro programa, para lograr esto la línea de codigo es la siguiente:

             public boolean handleEvent(Event evt)

    Como podemos ver, estamos declarando un método público del tipo "boolean". El tipo "boolean" o booleano es la variable que contiene solo dos valores, si y no. El programa toma este tipo de variable como verdadero o falso (True & False). Lo que esta entre parentecis indica que esto forma parte de un evento (Event NOMBREDEEVENTO), en este caso llamado "evt", igualmente podemos utilizar cualquier otro nombre que queramos, pero debemos respetar la sintaxis, recomiendo usarlo tal cual esta.

    Luego de esto comenzamos con las condiciones "if and else", la primera que explicare sera la del botón cerrar, puesto que es la más importante de todas y la vía mas rápida para salir del programa.

             if (evt.id == Event.WINDOW_DESTROY)
                 System.exit(0);

    Aqui le estamos indicando al programa que si el evento es igual a cerrar la ventana directamente, el sistema se cerrara por completo. Explicando lo lo que significa cada palabra, seria lo siguiente:

  • evt.id: esto es colocar el nombre del evento mas un ".id", como anteriormente lo definimos con el nombre de "evt", (Event evt), entonces para cada evento debemos usar el nombre evt.
  • Event.WINDOW_DESTROY: esto es un evento normalmente utilizado en los lenguajes de programación llamado window destroy, el cual indica si la ventana es destruida (cerrada) con el boton de cerrar.
  • System.exit(o): esto le dice al programa que se cerrara por completo la aplicación. Traducido significa Salida del Sistema.

    Luego dentro de ese mismo método, iniciamos otro "if" con el siguiente código:

             if (evt.target instanceof MenuItem)

    Esto indica al programa que si el evento es blanco de una instancia del tipo "MenuItem", se va a manejar una acción. Explicare cada palabra para que comprendamos mejor:

  • evt.target: indica si el evento creado, en este caso es llamado "evt", es accionado.
  • instanceof: indica si es una instancia de algún tipo.
  • MenuItem: esto lo colocamos porque los menús creados los hicimos como "MenuItems".

    Luego de colocar esta línea de código volvemos a abrir otro "if", para indicar al programa los métodos a los cuales ira, dependiendo de que opción escoja el usuario.

             if("NOMBRE DEL ITEM".equals(evt.arg))

    Si lo interpretamos textualmente diria lo siguiente: "si el nombre del item es igual al evento, entonces:". Para que quede más claro, sigo explicando cada cosa:

  • "NOMBRE DEL ITEM": es el nombre del MenuItem que creamos, y que esta entre parentecis en la definición de variables globales.
  • equals: este es un métodode comparación, su sintaxis es la siguiente: equals("lo que va a comparar").
  • evt.arg: esto pertenece al método de comparación equals(), y compara el evento para tomar una acción que definamos.

    Luego de la comparación de los "MenuItem" debemos retornar el valor como verdadero, esto lo logramos con "return (true)".

    Y por ultimo, retornamos el "handleEvent" con el nombre del evento, para ello escribimos return super.handleEvent(evt).

    Con esto ya podemos comenzar a crear métodos o acciones para que nuestro Frame sea totalmente funcional. Para que no queden dudas en esta parte, la sintaxis de esto seria la siguiente:

public boolean handleEvent(Event evt){
  if (evt.id == Event.WINDOW_DESTROY)
        System.exit(0);
  if (evt.target instanceof MenuItem) { 
if("NOMBRE DEL ITEM".equals(evt.arg)) {
//Acción o Método 
} return (true);
} return super.handleEvent(evt);
}

    Observando esta sintaxis, vemos que es realmente sencillo, ya que estos eventos se trabajan como condiciones. También en entradas anteriores vimos como llamar a un método, y es exactamente lo que hacemos aqui, para que sea más facil de manejar. Tomando el ejemplo que venimos creando del Frame quedaria asi:

import java.awt.*;
import javax.swing.*;

public class Ventana extends Frame
{
MenuBar BARRA = new MenuBar();
Menu MENU1 = new Menu("Menu1");
Menu MENU2 = new Menu("Menu2");
MenuItem ITEMa1 = new MenuItem("Item1");
MenuItem ITEMa2 = new MenuItem("Item2");
MenuItem ITEMb1 = new MenuItem("Item1");
MenuItem ITEMb2 = new MenuItem("Item2");

public Ventana()
{
super("Primera Ventana");
setLocation(100,100);
setSize(200,100);
setMenuBar(BARRA);

BARRA.add(MENU1);
BARRA.add(MENU2);
MENU1.add(ITEMa1);
MENU1.add(ITEMa2);
MENU2.add(ITEMb1);
MENU2.add(ITEMb2);

show();
}

public boolean handleEvent(Event evt)
{
if (evt.id == Event.WINDOW_DESTROY) //Método para cerrar
System.exit(0);                   //el Frame (ventana)

if (evt.target instanceof MenuItem) //Métodos a utilizar para cada opción
{
if("Item1".equals(evt.arg))
JOptionPane.showMessageDialog(null, "Este es el Item1",
"Item1", JOptionPane.INFORMATION_MESSAGE);

if("Item2".equals(evt.arg))
JOptionPane.showMessageDialog(null, "Este es el Item2",
"Item2", JOptionPane.INFORMATION_MESSAGE);

return (true);
}
return super.handleEvent(evt);
}

public static void main(String[] arg)
{
JOptionPane.showMessageDialog(null,"Usted a creado un Frame");
new Ventana();
}
}

    En este ejemplo se muestran diálogos al seleccionar un Item de cualquiera de los menús, ya que solo hemos trabajado con "JOptionPane", lo de abrir, guardar y editar opciones las ire publicando poco a poco. Luego podemos ir añadiendo a nuestro Frame más opciones y tenerlo mas completo.



Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión