gentoo linux, java, software libre y otras hierbas
Dic, 13 2007 - 4:39 pm

[código] Interfaces Gráficas en Java: menús (JMenu, JMenuBar, JMenuItem y JPopupMenu)

(anterior) En esta sección se presentan varios de los componentes de Java para la creación de interfaces gráficas de usuario. Los componentes de Swing pueden personalizarse para asemejarse a la apariencia de la plataforma computacional en la que se ejecute el programa, o pueden usar la apariencia visual de Java para brindar una interfaz idéntica en cualquier Sistema Operativo. Esta sección se centra en las clases JMenu, JMenuBar, JMenuItem y JPopupMenu.

Demostración de los menús (JMenu, JMenuBar, JMenuItem)


// Demostración de los menús
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PruebaMenu extends JFrame
{
   private final Color valoresColor[]={Color.black,Color.blue,Color.red,Color.green };
   private JRadioButtonMenuItem elementosColor[], tiposLetra[];
   private JCheckBoxMenuItem elementosEstilo[];
   private JLabel pantallaEtiqueta;
   private ButtonGroup grupoTiposLetra, grupoColores;
   private int estilo;

   // configurar GUI
   public PruebaMenu()
   {
      super( "Uso de objetos JMenu" );     

      // establecer menú Archivo y sus elementos de menú
      JMenu menuArchivo = new JMenu( "Archivo" );
      menuArchivo.setMnemonic( 'A' );

      // establecer elemento de menú Acerca de...
      JMenuItem elementoAcerca = new JMenuItem( "Acerca de..." );
      elementoAcerca.setMnemonic( 'c' );
      menuArchivo.add( elementoAcerca );
      elementoAcerca.addActionListener(

         new ActionListener() {  // clase interna anónima

            // mostrar cuadro de diálogo de mensaje cuando el usuario seleccione Acerca de...
            public void actionPerformed( ActionEvent evento )
            {
               JOptionPane.showMessageDialog( PruebaMenu.this,
                  "Éste es un ejemplo\ndel uso de menús",
                  "Acerca de", JOptionPane.PLAIN_MESSAGE );
            }

         }  // fin de la clase interna anónima

      ); // fin de la llamada a addActionListener

      // establecer elemento de menú Salir
      JMenuItem elementoSalir = new JMenuItem( "Salir" );
      elementoSalir.setMnemonic( 'S' );
      menuArchivo.add( elementoSalir );
      elementoSalir.addActionListener(

         new ActionListener() {  // clase interna anónima

            // terminar la aplicación cuando el usuario haga clic en elementoSalir
            public void actionPerformed( ActionEvent evento )
            {
               System.exit( 0 );
            }

         }  // fin de la clase interna anónima

      ); // fin de la llamada a addActionListener

      // crear barra de menús y adjuntarla a la ventana PruebaMenu
      JMenuBar barra = new JMenuBar();
      setJMenuBar( barra );
      barra.add( menuArchivo );    

      // crear menú Formato, con sus submenús y elementos de menú
      JMenu menuFormato = new JMenu( "Formato" );
      menuFormato.setMnemonic( 'F' );

      // crear submenú Color
      String colores[] = { "Negro", "Azul", "Rojo", "Verde" };

      JMenu menuColor = new JMenu( "Color" );
      menuColor.setMnemonic( 'C' );

      elementosColor = new JRadioButtonMenuItem[ colores.length ];
      grupoColores = new ButtonGroup();
      ManejadorEventos manejadorEventos = new ManejadorEventos();

      // crear elementos de menú tipo botones de opción para el menú Color
      for ( int cuenta = 0; cuenta < colores.length; cuenta++ ) {
         elementosColor[ cuenta ] =
            new JRadioButtonMenuItem( colores[ cuenta ] );
         menuColor.add( elementosColor[ cuenta ] );
         grupoColores.add( elementosColor[ cuenta ] );
         elementosColor[ cuenta ].addActionListener( manejadorEventos );
      }

      // seleccionar primer elemento del menú Color
      elementosColor[ 0 ].setSelected( true );  

      // agregar el menú Formato a la barra de menús
      menuFormato.add( menuColor );
      menuFormato.addSeparator();

      // crear submenú Tipo de letra
      String nombresTiposLetra[] = { "Serif", "Monospaced", "SansSerif" };

      JMenu menuTiposLetra = new JMenu( "Tipo de letra" );
      menuTiposLetra.setMnemonic( 'T' );

      tiposLetra = new JRadioButtonMenuItem[ nombresTiposLetra.length ];
      grupoTiposLetra = new ButtonGroup();

      // crear elementos de menú tipo botones de opción para el menú Tipos de letra
      for ( int cuenta = 0; cuenta < tiposLetra.length; cuenta++ ) {
         tiposLetra[ cuenta ] = new JRadioButtonMenuItem( nombresTiposLetra[ cuenta ] );
         menuTiposLetra.add( tiposLetra[ cuenta ] );
         grupoTiposLetra.add( tiposLetra[ cuenta ] );
         tiposLetra[ cuenta ].addActionListener( manejadorEventos );
      }

      // seleccionar el primer elemento del menú Tipo de letra
      tiposLetra[ 0 ].setSelected( true );

      menuTiposLetra.addSeparator();

      // establecer elementos del menú Estilo
      String nombresEstilo[] = { "Negrita", "Cursiva" };

      elementosEstilo = new JCheckBoxMenuItem[ nombresEstilo.length ];
      ManejadorEstilo manejadorEstilo = new ManejadorEstilo();

      // crear elementos de menú tipo casilla de verificación para el menú Estilo
      for ( int cuenta = 0; cuenta < nombresEstilo.length; cuenta++ ) {
         elementosEstilo[ cuenta ] =
            new JCheckBoxMenuItem( nombresEstilo[ cuenta ] );
         menuTiposLetra.add( elementosEstilo[ cuenta ] );
         elementosEstilo[ cuenta ].addItemListener( manejadorEstilo );
      }

      // colocar menú Tipo de letra en el menú Formato
      menuFormato.add( menuTiposLetra );

      // agregar menú Formato a la barra de menús
      barra.add( menuFormato );  

      // establecer etiqueta para mostrar texto
      pantallaEtiqueta = new JLabel( "Texto de ejemplo", SwingConstants.CENTER );
      pantallaEtiqueta.setForeground( valoresColor[ 0 ] );
      pantallaEtiqueta.setFont( new Font( "Serif", Font.PLAIN, 72 ) );

      getContentPane().setBackground( Color.CYAN );
      getContentPane().add( pantallaEtiqueta, BorderLayout.CENTER );

      setSize( 550, 200 );
      setVisible( true );

   } // fin del constructor

   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      PruebaMenu aplicacion = new PruebaMenu();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

   // clase interna para manejar eventos de acción de los elementos de menú
   private class ManejadorEventos implements ActionListener {

      // procesar selecciones de color y tipo de letra
      public void actionPerformed( ActionEvent evento )
      {
         // procesar selección de color
         for ( int cuenta = 0; cuenta < elementosColor.length; cuenta++ )

            if ( elementosColor[ cuenta ].isSelected() ) {
               pantallaEtiqueta.setForeground( valoresColor[ cuenta ] );
               break;
            }

         // procesar selección de tipo de letra
         for ( int cuenta = 0; cuenta < tiposLetra.length; cuenta++ )

            if ( evento.getSource() == tiposLetra[ cuenta ] ) {
               pantallaEtiqueta.setFont(
                  new Font( tiposLetra[ cuenta ].getText(), estilo, 72 ) );
               break;
            }

         repaint();  

      } // fin del método actionPerformed

   } // fin de la clase ManejadorEventos

   // clase interna para manejar eventos de los elementos de menú tipo casilla de verificación
   private class ManejadorEstilo implements ItemListener {

      // procesar selecciones de estilo de tipo de letra
      public void itemStateChanged( ItemEvent e )
      {
         estilo = 0;

         // checar selección de negrita
         if ( elementosEstilo[ 0 ].isSelected() )
            estilo += Font.BOLD;

         // checar selección de cursiva
         if ( elementosEstilo[ 1 ].isSelected() )
            estilo += Font.ITALIC;

         pantallaEtiqueta.setFont(
            new Font( pantallaEtiqueta.getFont().getName(), estilo, 72 ) );

         repaint();
      }

   } // fin de la clase ManejadorEstilo

} // fin de la clase PruebaMenu


Descargar código fuente

Demostración de los objetos JPopupMenu

// Demostración de los objetos JPopupMenu
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PruebaContextual extends JFrame {
   private JRadioButtonMenuItem elementos[];
   private final Color valoresColor[] =
      { Color.BLUE, Color.YELLOW, Color.RED };
   private JPopupMenu menuContextual;

   // configurar GUI
   public PruebaContextual()
   {
      super( "Uso de objetos JPopupMenu" );

      ManejadorEventos manejador = new ManejadorEventos();
      String colores[] = { "Azul", "Amarillo", "Rojo" };

      // establecer menú contextual y sus elementos
      ButtonGroup grupoColores = new ButtonGroup();
      menuContextual = new JPopupMenu();
      elementos = new JRadioButtonMenuItem[ 3 ];

      // construir cada elemento de menú y agregarlo al menú contextual; además
      // permitir el manejo de eventos para cada elemento de menú
      for ( int cuenta = 0; cuenta < elementos.length; cuenta++ ) {
         elementos[ cuenta ] = new JRadioButtonMenuItem( colores[ cuenta ] );
         menuContextual.add( elementos[ cuenta ] );
         grupoColores.add( elementos[ cuenta ] );
         elementos[ cuenta ].addActionListener( manejador );
      }

      getContentPane().setBackground( Color.WHITE );

      // declarar un objeto MouseListener para la ventana que muestra
      // un objeto JPopupMenu cuando ocurre el evento de desencadenamiento del menú contextual
      getContentPane().addMouseListener(

         new MouseAdapter() {  // clase interna anónima

            // manejar evento de oprimir botón del ratón
            public void mousePressed( MouseEvent evento )
            {
               checkForTriggerEvent( evento );
            } 

            // manejar evento de soltar el botón del ratón
            public void mouseReleased( MouseEvent evento )
            {
               checkForTriggerEvent( evento );
            } 

            // determinar si evento debe desencadenar el menú contextual
            private void checkForTriggerEvent( MouseEvent evento )
            {
               if ( evento.isPopupTrigger() )
                  menuContextual.show(
                     evento.getComponent(), evento.getX(), evento.getY() );
            }

         } // fin de la clase interna anónima

      ); // fin de la llamada a addMouseListener

      setSize( 300, 200 );
      setVisible( true );

   } // fin del constructor de PruebaContextual

   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      PruebaContextual aplicacion = new PruebaContextual();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

   // clase interna privada para manejar eventos de elemento de menú
   private class ManejadorEventos implements ActionListener {

      // procesar selecciones de elementos de menú
      public void actionPerformed( ActionEvent evento )
      {
         // determinar cuál elemento de menú fue seleccionado
         for ( int i = 0; i < elementos.length; i++ )
            if ( evento.getSource() == elementos[ i ] ) {
               getContentPane().setBackground( valoresColor[ i ] );
               return;
            }
      }

   } // fin de la clase interna privada ManejadorEventos

} // fin de la clase PruebaContextual


Descargar código fuente

Etiquetas: hack, java, mono
Los ejercicios utilizados en este post están basados en ejemplos del libro Cómo programar en Java de Deitel, y por lo tanto están bajo la licencia que esta editorial disponga.

15 Comentarios | deja el tuyo

Un enlace entrante

14 Comentarios en “[código] Interfaces Gráficas en Java: menús (JMenu, JMenuBar, JMenuItem y JPopupMenu)”

  1. adiel dice:

    q buena pagina, aiba

  2. andres felipe williams suarez dice:

    oyeme tu si que sabes y gracias a dios existe una pagina muy buena e interesante que nos permita fortalecernos en el lenguaje de programacion java

  3. Ester sitio me parece recontra didactico y chever para aprender a utilisar interfaz de ajava (Y)

  4. Daniel dice:

    si es posible transformar los componentes swing a 3d

  5. Anaid dice:

    Hola!!!
    la neta esta chida tu pag web si que ayuda demasiado….
    bueno me despido …bye

  6. java dice:

    hola, tengo una duda para hacer un grafico de barras, ya tengo el de pastel (circular) pero no se como meter el de barras y el diseño, suena extraño pero asi es, me puede ayudar alguien y como meteria mi condigo para que lo checaran…

    grcias…

  7. Javier Kandy dice:

    holoa que bien me sirve de gran ayuda
    espero que sigan asi
    algun dia sere un buen programador
    grax.

  8. William dice:

    Me pareció buenísima la página

  9. juan dice:

    Q buen aporte este, solo q me parece poco profesional el no dar la fuente original de donde sacaste el codigo ya que no eres tu el creador, deberias de darle el credito a quien hizo el esfuerzo de crearlo NO CREES!!!

  10. Cristian dice:

    Y tú deberías aprender a leer! Fíjate en el recuadro azul abajo de los ejercicios!

    :P

  11. Nekk29 dice:

    Si q esta buena la pagina…

  12. Julieth dice:

    Gracias. La verdad me ayudo bastante. N o tenía muy claras algunas ideas.

  13. Nicolás dice:

    informacion acerca de base de datos….

  14. Juan dice:

    Gracias por los ejemplos, tenia dudas al respecto de este tema pero con estos ejemplos pude resolverlos, muchas gracias

¡Déjanos tu comentario!