package interfaz; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * Clase para aprender sobre los JComboBox * @author Magus */ public class Main extends JFrame implements ActionListener { private JComboBox cboPersonajes; private JLabel lblImage; /** * Crea una instancia nueva de la aplicacion */ public Main() { setLayout(new BorderLayout()); /** * Primero tenemos que crear un arreglo de String para que sean los * valores que tome nuestro JComboBox. Cada uno de los String se va a * convertir en un item que puede ser seleccionado. */ String[] personajes = { "Megaman", "Zero", "Snake" }; /** * Para crear el JComboBox utilizamos un constructor que recibe un * arreglo de String. */ cboPersonajes = new JComboBox(personajes); /** * Para saber cuando cambia la selección debemos utilizar un * ActionListener. El ActionListener invoca el metodo actionPerformed() * cada vez que se selecciona un objeto, sin importar que sea el mismo * objeto que ya estaba seleccionado. */ cboPersonajes.addActionListener(this); /** * Si queremos poner mas objetos despues de creado podemos utilizar el * metodo addItem() que nos permite especificar un String para incluir * en el JComboBox (esto puede ser util si queremos que el usuario nos * de mas opciones). */ cboPersonajes.addItem("Ninguno"); getContentPane().add(cboPersonajes, BorderLayout.NORTH); lblImage = new JLabel(); getContentPane().add(lblImage, BorderLayout.CENTER); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(291,408); setTitle("JComboBox"); 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 item que se haya seleccionado. * * @param e El evento que se ha generado */ public void actionPerformed(ActionEvent e) { String path = ""; /** * Aunque no es necesario para esta aplicacion es importante notar que * para saber que JComboBox invoco el evento utilizamos el metodo * getSource() de la misma manera que lo haciamos con los JButton. */ if (e.getSource() == cboPersonajes) { /** * Podemos obtener el item que esta seleccionado con el metodo * getSelectedItem() pero recuerda que tenemos que hacer un cast * para conertirlo en String y que podamos utilizarlo. */ path = (String)cboPersonajes.getSelectedItem(); path = path + ".jpg"; setImage(lblImage, path); } } /** * 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); } }