package docen_swing; import java.awt.*; import java.awt.event.ActionEvent; import javax.swing.JLabel; import javax.swing.JApplet; import javax.swing.JComboBox; import javax.swing.ImageIcon; import javax.swing.BorderFactory; import java.net.MalformedURLException; import java.io.IOException; import java.net.URL; /***************************************************************************** * Applet que tiene un combo con nombres de imágenes. * En la JLabel (etiqueta_imagen) se situa la imagen (ImageIcon). * En el combo ponemos los nombres de las imágenes. * Las imágenes se obtienen desde un archivo jar y se cargan en un array ImageIcon. * Atrapamos el evento de cambio de selección del combo, con la finalidad de mostrar * la imagen correspondiente al item seleccionado. *****************************************************************************/ public class visor extends JApplet { JComboBox combo = new JComboBox(); // Combo donde están los nombres de imágenes JLabel etiqueta_imagen = new JLabel(); // Etiqueta donde pondremos imagen String[] nom_imagenes = {"casa", "mar" }; // Nombres de los archivos de imágenes ImageIcon[] imagenes = new ImageIcon[nom_imagenes.length]; // vector de imagenes public void init() { try { jbInit(); } catch ( Exception e ) { e.printStackTrace(); } } /******************************************************************* * Inicialización de componentes ******************************************************************/ private void jbInit() throws Exception { /*** Obtengo el panel raíz y le asignno un administrador de diseño FlowLayout ***/ Container contenedor_applet = getContentPane(); contenedor_applet.setLayout( new FlowLayout() ); /*** Definimos aspecto y listener del combo. Etiqueta: borde y tamaño ***/ combo.setPreferredSize(new Dimension(150, 21)); combo.addActionListener(new visor_combo_actionAdapter(this)); etiqueta_imagen.setBorder( BorderFactory.createRaisedBevelBorder()); etiqueta_imagen.setPreferredSize(new Dimension(300, 200)); /*** Llenamos el combo y cargamos imágenes en array ***/ cargar_combo(); cargar_imagenes(); /*** Selección predeterminada: la primera imagen ***/ etiqueta_imagen.setIcon( imagenes[0]); // En etiqueta: ponemos la 1ª imagen combo.setSelectedIndex( 0 ); // En combo: seleccionado nombre 1º /*** Añadimos los componentes al contenedor (Content Pane) ***/ contenedor_applet.add(combo); contenedor_applet.add(etiqueta_imagen); } //////////////////////////// Fin de jbInit() /*************************************************************************** * Pone en combo los nombres de las imágenes ***************************************************************************/ void cargar_combo() { for ( int i = 0; i < nom_imagenes.length; i++ ) combo.addItem( nom_imagenes[i] ); } /**************************************************************************** * Carga las imagenes almacenadas en archivo JAR. Las imagenes se cargan * en el array. ****************************************************************************/ void cargar_imagenes() { try { URL url_imagen; for ( int i = 0; i < nom_imagenes.length; i++ ) { /*** Leer de JAR: obtenemos el URL y cargo imagen en array ***/ url_imagen = new URL( "jar:" + getCodeBase().toString() + "imagenes.jar!/" + nom_imagenes[i] + ".JPG" ); imagenes[i] = new ImageIcon( getImage( url_imagen ) ); } } catch (MalformedURLException mue) { // Hija de IOException System.out.print("URL inadecuada: "); System.out.println(mue.getMessage() ); } catch (IOException ioe) { // Hija de Exception System.out.print("IOException: "); System.out.println(ioe.getMessage() ); } catch (Exception e) { System.out.print("Excepción general: cargar_imagenes(). "); System.out.println(e.getMessage()); } } /******************************************************************* * Gestión de evento de cambio de selección en combo: cambia la imagen de * la etiqueta *******************************************************************/ void combo_actionPerformed(ActionEvent e) { int indice_seleccionado = combo.getSelectedIndex(); etiqueta_imagen.setIcon( imagenes[indice_seleccionado]); } } ////////////////////// Fin de clase \\\\\\\\\\\\\\\\\\\\\\\\\\\\ /*************************************************************************** * Listener del combo **************************************************************************/ class visor_combo_actionAdapter implements java.awt.event.ActionListener { visor adaptee; visor_combo_actionAdapter(visor adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.combo_actionPerformed(e); } }