package botonderecho;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
/**
*
* @author Rafa
*/
public class BotonDerecho extends JFrame{
private JRadioButtonMenuItem elementos[]; //contiene los elementos para los colores
private final Color valoresColores[] = {Color.BLUE, Color.YELLOW, Color.RED, Color.BLACK, Color.GREEN}; //colores a utilizar
private JPopupMenu menuContextual; //permite al usuario seleccionar el color
//el constructor sin argumentos establece la GUI
public BotonDerecho() {
super("Manejo de Objetos JPopupMenu");
//Maneja eventos de menu
ManejadorElementos manejador = new ManejadorElementos();
String colores[] = {"Azul", "Amarillo", "Rojo", "Negro", "Verde"}; //arreglo de colores
//administra elementos de colores
ButtonGroup grupoColores = new ButtonGroup();
menuContextual = new JPopupMenu(); //crea el menú contextual
elementos = new JRadioButtonMenuItem[5]; //elementos para seleccionar el color
//construye elemento de menú, lo agrega al menú contextual, habilita el manejo de eventos
for (int cuenta = 0; cuenta < elementos.length; cuenta++){
elementos[cuenta] = new JRadioButtonMenuItem(colores[cuenta]);
menuContextual.add(elementos[cuenta]); //agrega elemento al menú contextual
grupoColores.add(elementos[cuenta]); //agrega elemento al grupo de botones
elementos[cuenta].addActionListener(manejador); //agrega el manejador
} //fin de for
setBackground(Color.WHITE); //establece el color de fondo en blanco
//declara un objeto MouseListener para que la ventana muestre el menú contextual
addMouseListener(
new MouseAdapter() {//clase interna anónima
//maneja el evento de oprimir el botón del ratón
public void mousePressed(MouseEvent evento){
checkForTriggerEvent(evento); //comprueba el desencadenador
} //fin del método mousePressed
//maneja el evento de liberación del botón del ratón
public void mouseReleased(MouseEvent evento){
checkForTriggerEvent(evento); //comprueba el desencadenador
} //fin del método mouseReleased
//determina si el evento debe desencadenar el menú contextual
private void checkForTriggerEvent(MouseEvent evento){
if (evento.isPopupTrigger())
menuContextual.show(evento.getComponent(), evento.getX(), evento.getY());
} //fin del método checkForTriggerEvent
} //fin de la clase interna anónima
); //fin de la llamada a addMouseListener
} //fin del constructor de MarcoContextual
//clase interna privada para manejar los eventos de los elementos de menú
private class ManejadorElementos implements ActionListener{
//procesa las selecciones de los elementos de menú
public void actionPerformed(ActionEvent evento){
//determina cuál elemento de menú se seleccionó
for (int i = 0; i < elementos.length; i++){
if (evento.getSource() == elementos[i]){
getContentPane().setBackground(valoresColores[i]);
return;
} //fin de if
} //fin de for
} //fin del método actionPerformed
} //fin de la clase interna privada
public static void main(String[] args) {
BotonDerecho botonDerecho = new BotonDerecho(); //crea marco contextual
botonDerecho.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
botonDerecho.setSize(500, 400);
botonDerecho.setVisible(true);
botonDerecho.setLocationRelativeTo(null);
}
}