Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. package botonderecho;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.awt.event.MouseAdapter;
  8. import java.awt.event.MouseEvent;
  9. import javax.swing.ButtonGroup;
  10. import javax.swing.JButton;
  11. import javax.swing.JFrame;
  12. import javax.swing.JPanel;
  13. import javax.swing.JPopupMenu;
  14. import javax.swing.JRadioButtonMenuItem;
  15.  
  16. /**
  17.  *
  18.  * @author Rafa
  19.  */
  20. public class BotonDerecho extends JFrame{
  21.     private JRadioButtonMenuItem elementos[]; //contiene los elementos para los colores
  22.     private final Color valoresColores[] = {Color.BLUE, Color.YELLOW, Color.RED, Color.BLACK, Color.GREEN}; //colores a utilizar
  23.     private JPopupMenu menuContextual; //permite al usuario seleccionar el color
  24.  
  25.     //el constructor sin argumentos establece la GUI
  26.     public BotonDerecho() {
  27.         super("Manejo de Objetos JPopupMenu");
  28.        
  29.         //Maneja eventos de menu
  30.         ManejadorElementos manejador = new ManejadorElementos();
  31.         String colores[] = {"Azul", "Amarillo", "Rojo", "Negro", "Verde"}; //arreglo de colores
  32.  
  33.         //administra elementos de colores
  34.         ButtonGroup grupoColores = new ButtonGroup();
  35.         menuContextual = new JPopupMenu(); //crea el menú contextual
  36.         elementos = new JRadioButtonMenuItem[5]; //elementos para seleccionar el color
  37.  
  38.         //construye elemento de menú, lo agrega al menú contextual, habilita el manejo de eventos
  39.         for (int cuenta = 0; cuenta < elementos.length; cuenta++){
  40.             elementos[cuenta] = new JRadioButtonMenuItem(colores[cuenta]);
  41.             menuContextual.add(elementos[cuenta]); //agrega elemento al menú contextual
  42.             grupoColores.add(elementos[cuenta]); //agrega elemento al grupo de botones
  43.             elementos[cuenta].addActionListener(manejador); //agrega el manejador
  44.         } //fin de for
  45.  
  46.         setBackground(Color.WHITE); //establece el color de fondo en blanco
  47.  
  48.         //declara un objeto MouseListener para que la ventana muestre el menú contextual
  49.         addMouseListener(
  50.  
  51.             new MouseAdapter() {//clase interna anónima
  52.                 //maneja el evento de oprimir el botón del ratón
  53.                 public void mousePressed(MouseEvent evento){
  54.                     checkForTriggerEvent(evento); //comprueba el desencadenador
  55.                 } //fin del método mousePressed
  56.  
  57.                 //maneja el evento de liberación del botón del ratón
  58.                 public void mouseReleased(MouseEvent evento){
  59.                     checkForTriggerEvent(evento); //comprueba el desencadenador
  60.                 } //fin del método mouseReleased
  61.  
  62.                 //determina si el evento debe desencadenar el menú contextual
  63.                 private void checkForTriggerEvent(MouseEvent evento){
  64.                     if (evento.isPopupTrigger())
  65.                         menuContextual.show(evento.getComponent(), evento.getX(), evento.getY());
  66.                 } //fin del método checkForTriggerEvent
  67.             } //fin de la clase interna anónima
  68.         ); //fin de la llamada a addMouseListener
  69.     } //fin del constructor de MarcoContextual
  70.  
  71.     //clase interna privada para manejar los eventos de los elementos de menú
  72.     private class ManejadorElementos implements ActionListener{
  73.         //procesa las selecciones de los elementos de menú
  74.         public void actionPerformed(ActionEvent evento){
  75.             //determina cuál elemento de menú se seleccionó
  76.             for (int i = 0; i < elementos.length; i++){
  77.                 if (evento.getSource() == elementos[i]){
  78.                     getContentPane().setBackground(valoresColores[i]);
  79.                     return;
  80.                 } //fin de if
  81.             } //fin de for
  82.         } //fin del método actionPerformed
  83.     } //fin de la clase interna privada
  84.    
  85.     public static void main(String[] args) {
  86.         BotonDerecho botonDerecho = new BotonDerecho(); //crea marco contextual
  87.         botonDerecho.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  88.        
  89.         botonDerecho.setSize(500, 400);
  90.         botonDerecho.setVisible(true);
  91.         botonDerecho.setLocationRelativeTo(null);
  92.     }
  93. }