7.14 MENÚS EMERGENTES

 

Hola a todos. Los menús emergentes o menús secundarios, son estos menús que aparecen al pulsar sobre el botón derecho del ratón sobre un botón, un área de texto, un menú…

Para crear los menús emergentes utilizamos la clase JPopupMenu que tiene varios métodos el que vamos a utilizar nosotros es setComponentPopupMenu(Component c). El parámetro component se refiere al objeto donde hacemos clic para que aparezca el menú emergente.

Como siempre, para verlo más claro lo vamos a hacer mediante una práctica cuyo código inicial es el siguiente:

package swing;

 

import java.awt.Font;

 

import javax.swing.*;

 

public class MenuEmergente {

 

       public static void main(String[] args) {

            

             MarcoEmergente mimarco = new MarcoEmergente();

            

             mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

       }

 

}

 class MarcoEmergente extends JFrame {

 

       public MarcoEmergente(){

            

             setVisible(true);

            

             setBounds(550, 300, 550, 400);

            

             LaminaEmergente milamina = new LaminaEmergente();

            

             add(milamina);

 

            

       }

}

 class LaminaEmergente extends JPanel {

        

        public LaminaEmergente() {

              

              

        }

        

 

      

 }

Es un código que no hace falta explicación ya lo que hemos visto en reiteradas ocasiones. Nos situamos dentro del constructor de la lámina y lo primero que vamos a hacer es instanciar la clase JPopupMenu:

public LaminaEmergente() {

              

              JPopupMenu emergente = new JPopupMenu();

              

              

        }

Con esto ya hemos creado el menú emergente, lo que pasa que está vacio, tenemos que agregar los ítems que queremos que aparezca en el menú secundario.

Agregamos los ítems:

public LaminaEmergente() {

              

              JPopupMenu emergente = new JPopupMenu();

              

              JMenuItem opcion1 = new JMenuItem("Opción 1");

              

              emergente.add(opcion1);

 

        }

Tenemos que indicarle donde va a aparecer el menú secundario y esto se hace con setComponentPopupMenu, en esta ocasión es fácil porque va a aparercer el menú s al hacer clic con el botón derecho del ratón sobre la lámina:

public LaminaEmergente() {

              

              JPopupMenu emergente = new JPopupMenu();

              

              JMenuItem opcion1 = new JMenuItem("Opción 1");

              

              emergente.add(opcion1);

              

              setComponentPopupMenu(emergente);

        }

Añadimos unos cuantos más ítems para que no aparezca el menú emergente tan pobre:

public LaminaEmergente() {

              

              JPopupMenu emergente = new JPopupMenu();

              

              JMenuItem opcion1 = new JMenuItem("Opción 1");

              

              JMenuItem opcion2 = new JMenuItem("Opción 2");

              

              JMenuItem opcion3 = new JMenuItem("Opción 3");

              

              emergente.add(opcion1);

              

              emergente.add(opcion2);

              

              emergente.add(opcion3);

              

              setComponentPopupMenu(emergente);

        }

Probamos:



Vemos que en cualquier parte de la lámina que hagamos clic con el botón derecho nos aparece el menú emergente.

Sin embargo, este ejemplo es muy sencillo, de normal en cualquier aplicación gráfica cuando se hace clic con el botón derecho del ratón el menú emergente que aparece no es el mismo cuando se hace sobre un botón, sobre un área de texto, sobre un menú… y es ahí cuando se complica.

Vamos a añadir unas líneas de código a nuestra práctica para crear un menú, como esto ya lo hemos visto en apartado anteriores no se va  a explicar, es el siguiente:

public LaminaEmergente() {

              

              setLayout(new BorderLayout());

              

              JPanel laminamenu=new JPanel();

              

              JMenuBar barra = new JMenuBar();

              

              JMenu archivo = new JMenu("Archivo");

              

              JMenu edicion = new JMenu("Edicion");

              

              JMenu formato = new JMenu("Formato");

              

              barra.add(archivo);

              

              barra.add(edicion);

              

              barra.add(formato);

              

              laminamenu.add(barra);

              

              add(laminamenu, BorderLayout.NORTH);

              

              JTextPane area = new JTextPane();

              

              add(area, BorderLayout.CENTER);

              

              

              //---------------Menú Emergente--------------

              JPopupMenu emergente = new JPopupMenu();

              

              JMenuItem opcion1 = new JMenuItem("Opción 1");

              

              JMenuItem opcion2 = new JMenuItem("Opción 2");

              

              JMenuItem opcion3 = new JMenuItem("Opción 3");

              

              emergente.add(opcion1);

              

              emergente.add(opcion2);

              

              emergente.add(opcion3);

              

              setComponentPopupMenu(emergente);

        }

Se ha añadido una barra de menús, unos menús y un área de texto, si probamos:



Ahora si pulsamos con el botón secundario del ratón sobre el área de texto ya no aparece el menú emergente ya que la lámina ha sido tapada por el área, para indicarle que tiene que aparecer el menú emergente cuando hagamos clic con el botón secundario del ratón en cualquier parte del área se lo hemos de indicar de la siguiente manera, modificando la línea de código:

area.setComponentPopupMenu(emergente);

Probamos la aplicación y hacemos clic con el botón secundario del ratón en cualquier parte del área de texto vemos que aparece el menú emergente:



Con esto ya estaría finalizado. Os espero en el próximo, hasta pronto!

7.13 MENÚ CON RADIOBUTTON << >> 7.15ATAJOS DE TECLADO



No hay comentarios:

Publicar un comentario