package interfaz; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.*; /** * Clase para aprender sobre los JRadioButton * @author Magus */ public class Main extends JFrame implements ActionListener { private JRadioButton radMegaman; private JRadioButton radZero; private JRadioButton radSnake; private JLabel lblImage; /** * Crea una instancia nueva de la aplicacion */ public Main() { setLayout(new BorderLayout()); /** * Tenemos que crear un ButtonGroup para que podamos poner varios * JRadioButtons sin tener problema de que unos botones que no esten * relacionados cancelen la seleccion de otros. */ ButtonGroup group = new ButtonGroup(); JPanel pnlBotones = new JPanel(new GridLayout(3,1)); /** * Para crear un nuevo JRadioButton debemos utilizar el mismo * constructor que para crear un boton, en el que pasamos el texto que * queremos que despliegue como parametro. */ radMegaman = new JRadioButton("Megaman"); /** * Los JRadioButtons heredan todos los metodos de JComponent por lo que * podemos ponerles imagenes como ya vimos o podemos ponerles una tecla * de acceso rapido. */ radMegaman.setMnemonic(KeyEvent.VK_M); /** * Para saber cuadno un JRadioButton fue presionado utilizamos un * ActionListener, igual que con los botones. */ radMegaman.addActionListener(this); /** El metodo setSelected me permite cambiar la seleccion del boton. */ radMegaman.setSelected(true); /** * Puedo agregar imagenes a los JRadioButton como haria con otros * componentes de swing (si te fijas el metodo que mando llamar esta en * la parte de hasta abajo de este archivo y crea una imagen de la misma * manera que se ve en el trial de imagenes.) Pero tambien puedo agregar * todavia mas opciones a los iconos para cuando esta seleccionado. */ setImage(radMegaman, "megaman"); /** * Tengo que agregar el boton al grupo que creamos de botones para que * solamente uno de los botones del grupo pueda estar elegido al mismo * tiempo. */ group.add(radMegaman); pnlBotones.add(radMegaman); radZero = new JRadioButton("Zero"); radZero.setMnemonic(KeyEvent.VK_Z); radZero.addActionListener(this); setImage(radZero, "zero"); group.add(radZero); pnlBotones.add(radZero); radSnake = new JRadioButton("Snake"); radSnake.setMnemonic(KeyEvent.VK_S); radSnake.addActionListener(this); setImage(radSnake, "snake"); group.add(radSnake); pnlBotones.add(radSnake); getContentPane().add(pnlBotones, BorderLayout.WEST); lblImage = new JLabel(); getContentPane().add(lblImage, BorderLayout.CENTER); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(330,300); setTitle("JRadioButton"); setVisible(true); setImage(lblImage, "megaman.jpg"); } /** * Inicia la aplicacion * * @param args the command line arguments */ public static void main(String[] args) { Main app = new Main(); } /** * Metodo que manda llamar el metodo que cambia la imagen que se muestra * dependiendo del boton que se ha presionado. * * @param e El evento que se ha generado */ public void actionPerformed(ActionEvent e) { String path = ""; if (e.getSource() == radMegaman) { path = "megaman.jpg"; } else if (e.getSource() == radZero) { path = "zero.jpg"; } else if (e.getSource() == radSnake) { path = "snake.jpg"; } setImage(lblImage, path); } /** * Metodo que recibe un JRadioButton y le pone diferentes imagenes para los * estados que puede manejar. El metodo le pone una imagen para el estado * rollover, otra imagen para el estado seleccionado y otra imagen para el * estado deseleccionado. * * @param cmpImage El JRadioButton al que se le van a poner las imagenes. * @param path La ruta de archivo que contiene las imagenes. */ public void setImage(JRadioButton cmpImage, String path) { Toolkit tk = Toolkit.getDefaultToolkit(); Image ima = tk.getImage(Main.class.getResource(path + ".jpg")); ImageIcon ico = new ImageIcon( ima.getScaledInstance(32, 43, Image.SCALE_SMOOTH)); /** * setSelectedIcon es el icono que se va a mostrar cuando este * seleccionado el JRadioButton */ cmpImage.setSelectedIcon(ico); ima = tk.getImage(Main.class.getResource(path + "-rollover.jpg")); ico = new ImageIcon( ima.getScaledInstance(32, 43, Image.SCALE_SMOOTH)); /** * setRolloverIcon es el icono que se va a mostrar cuando el mouse se * encuentre sobre el JRadioButton. */ cmpImage.setRolloverIcon(ico); ima = tk.getImage(Main.class.getResource(path + "-deselected.jpg")); ico = new ImageIcon( ima.getScaledInstance(32, 43, Image.SCALE_SMOOTH)); /** El icono normal es el que se muestra cuadno no esta seleccionado. */ cmpImage.setIcon(ico); } /** * Metodo que recibe un JLabel y crea un nuevo icono a partir de la imagen * encontrada en la ruta pasada como parametro. * * @param cmpImage El JLabel al que se le va a poner la imagen * @param path La ruta en la que se encuentra la imagen que se va a utilizar. */ private void setImage(JLabel cmpImage, String path) { Toolkit tk = Toolkit.getDefaultToolkit(); Image ima = tk.getImage(Main.class.getResource(path)); int width = cmpImage.getWidth(); int height = cmpImage.getHeight(); ImageIcon ico = new ImageIcon( ima.getScaledInstance(width, height, Image.SCALE_SMOOTH)); cmpImage.setIcon(ico); } }