Java
Home

JMenu e Jpopup Menu

 

/*
* Main.java
*
* Created on 6 de Março de 2007, 20:14
*/

package menus;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

/**
*
* @author adrw
*/

public class Main extends JFrame {

   private Color cores[] = { Color.black, Color.blue, Color.red, Color.green };

   private JRadioButtonMenuItem colorItems[], fonts[];
   private JCheckBoxMenuItem styleItems[];
   private JLabel displayLabel;
   private ButtonGroup fontGroup, colorGroup;
   private int style;


   //popup
   private JRadioButtonMenuItem pop_items[];
   private JPopupMenu popupMenu;

   public Main()
   {
      super("Exemplo de menu");

      JMenu fileMenu = new JMenu("Arquivo");
      fileMenu.setMnemonic('F');

      JMenuItem aboutItem = new JMenuItem("Sobre...");
      aboutItem.setMnemonic('A');

      aboutItem.addActionListener (

      new ActionListener()
      {
         public void actionPerformed( ActionEvent event )
         {
            JOptionPane.showMessageDialog( Main.this, "Exemplo", "About", JOptionPane.PLAIN_MESSAGE );
         }
      }

      );


      fileMenu.add( aboutItem );


      JMenuItem exitItem = new JMenuItem("Sair");
      exitItem.setMnemonic('x');

      exitItem.addActionListener (

      new ActionListener()
      {
         public void actionPerformed( ActionEvent event )
         {
            System.exit(0);
         }
      }

      );


      fileMenu.add( exitItem );

      JMenuBar bar = new JMenuBar();


      this.setJMenuBar( bar );
      bar.add( fileMenu );

      JMenu formatMenu = new JMenu("Formatar");
      formatMenu.setMnemonic('r');

      String colors[] = { "Preto", "Azul", "Red", "Green" };

      JMenu colorMenu = new JMenu("Cor");
      colorMenu.setMnemonic('C');

      colorItems = new JRadioButtonMenuItem[ cores.length ];

      colorGroup = new ButtonGroup();
      ItemHandler itemHandler = new ItemHandler();

      for ( int count = 0; count < cores.length; count++ )
      {
         colorItems[ count ] = new JRadioButtonMenuItem( colors[count] );

         colorMenu.add( colorItems[count] );
         colorGroup.add( colorItems[ count ] );

         colorItems[ count ].addActionListener( itemHandler );
      }

      colorItems[0].setSelected( true );

      formatMenu.add( colorMenu );
      formatMenu.addSeparator();

      String fontNames[] = {"Serif", "Monospaced", "SansSerif" };

      JMenu fontMenu = new JMenu("Fonte");
      fontMenu.setMnemonic('n');

      fonts = new JRadioButtonMenuItem[ fontNames.length ];
      fontGroup = new ButtonGroup();

      for( int count=0; count < fonts.length; count++ )
      {
         fonts[ count ] = new JRadioButtonMenuItem( fontNames[count] ) ;
         fontMenu.add( fonts[count] );
         fontGroup.add( fonts[count] );
      
         fonts[ count ].addActionListener( itemHandler );
      }


      fonts[0].setSelected( true );
      fontMenu.addSeparator();

      String styleNames[] = { "Negrito", "Italico" };

      styleItems = new JCheckBoxMenuItem[ styleNames.length ];
      StyleHandler styleHandler = new StyleHandler();


      for ( int count=0; count<styleNames.length; count++ )
      {
         styleItems[ count ] = new JCheckBoxMenuItem( styleNames[ count ] );

         fontMenu.add( styleItems[ count ] );

         styleItems[ count ].addItemListener( styleHandler );
      }

      formatMenu.add( fontMenu );

      bar.add( formatMenu );

      displayLabel = new JLabel("Texto Exemplo", SwingConstants.CENTER );

      displayLabel.setForeground( cores[0] );
      displayLabel.setFont( new Font("TimesRoman", Font.PLAIN, 72) );


      getContentPane().setBackground( Color.cyan );
      getContentPane().add( displayLabel, BorderLayout.CENTER );



      // popup
      pop_handler pop_handler = new pop_handler();
      ButtonGroup pop_colorGroup = new ButtonGroup();
      popupMenu = new JPopupMenu();
      pop_items = new JRadioButtonMenuItem[3];

      for ( int c = 0; c<pop_items.length; c++ )
      {
         pop_items[ c ] = new JRadioButtonMenuItem( colors[c] );

         popupMenu.add( pop_items[c]);
         pop_colorGroup.add( pop_items[c] );

         pop_items[c].addActionListener( pop_handler );
      }


      addMouseListener (
         new MouseAdapter()
         {
            public void mousePressed( MouseEvent event )
            {
               checkMouse( event );
            }

            public void MouseReleased( MouseEvent event )
            {
               checkMouse( event );
            }

            private void checkMouse( MouseEvent event )
            {

               //if ( event.isPopupTrigger() )
               //{
               // está aceitando qualquer clique

               popupMenu.show( event.getComponent(), event.getX(), event.getY());
               //}
            }
         }
      );





      setSize( 500, 200 );
      setVisible( true );
   }


   public static void main(String[] args)
   {
      Main app = new Main();

      app.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

   public class ItemHandler implements ActionListener
   {

      public void actionPerformed( ActionEvent event )
      {
         for ( int count=0; count<colorItems.length; count++ )
         {
            if ( colorItems[ count ].isSelected() )
            {
               displayLabel.setForeground( cores[ count ] );
               break;
            }

         }

         for( int count=0; count<fonts.length; count++)
         {
            if ( event.getSource() == fonts[ count ] )
            {
               displayLabel.setFont( new Font( fonts[count].getText(), style, 72) );
               break;
            }
         }

         repaint();

      }

   }

   private class StyleHandler implements ItemListener {

      public void itemStateChanged( ItemEvent e )
      {
         style = 0;
   
         if ( styleItems[0].isSelected() )
         {
            style += Font.BOLD;
         }

         if ( styleItems[1].isSelected() )
         {
            style += Font.ITALIC;
         }

         displayLabel.setFont( new Font( displayLabel.getFont().getName(), style, 72 ) );
      }
   }


   private class pop_handler implements ActionListener
   {
      public void actionPerformed( ActionEvent event )
      {
         for ( int i=0; i<pop_items.length; i++)
         {
            //JOptionPane.showMessageDialog( null, "a " + event.getSource(), "", JOptionPane.CANCEL_OPTION );
            if ( event.getSource() == pop_items[i] )
            {
               getContentPane().setBackground( cores[i] );
               //displayLabel.setForeground( cores[ i ] );

               repaint();
               return;
            }
         }
      }
   }

}