Algunos componentes Swing, como JLabel y JButton, pueden ser decorados con un icono -- una imagen de tama�o fijo. En Swing, un icono es un objeto que se adhiere al interface Icon. Swing proporciona una implementaci�n particularmente �til del interface Icon.
ImageIcon, que dibuja un icono desde una imagen JPEG o GIF..
Nota a los programadores AWT: un objeto ImageIcon usa MediaTracker para cargar la imagen desde un nombre de fichero, una URL u otra fuente.
ImageIcon es una alternativa manejable y f�cil de usar para Image porque ImageIcon maneja la relaci�n con el MediaTracker y sigue la pista del estado de la carga de la imagen. Sin embargo, se puede obtner el objeto Image desde un ImageIcon si necesitamos m�s control. |
Aqu� tenemos un applet que usa iconos para dos prop�sitos diferentes.
Est� es una imagen del GUI del Applet, para ejecutarlo, pulsa sobre ella. El applet aparecer� en una nueva ventana del navegador.
Un icono en una etiqueta impelementa el �rea fotgr�fica del applet. El applet tamb�en usa iconos para decorar los botones Previous Picture y Next Picture de la parte inferior de la ventana del applet.
Prueba esto:
|
Primero veamos el c�digo de IconDemoApplet.java que crea e inicializa las felchas usadas en los botones del applet, porque es un c�digo muy sencillo.
//create the image icons for the next and previous buttons ImageIcon nextIcon = new ImageIcon(getURL("images/LEFT.gif")); ImageIcon previousIcon = new ImageIcon(getURL("images/left.gif")); ... //use them to create a buttons previous = new JButton("Previous Picture", previousIcon); ... next = new JButton("Next Picture", nextIcon);
El �nico argumentos para el constructor del icono es la URL del fichero que contiene la imagen. El m�todo getURL a�ade el code base del applet al nombre del fichero que contiene la imagen del applet. Puedes copiar este m�todo para usarlo en tus applets.
protected URL getURL(String filename) { URL codeBase = this.getCodeBase(); URL url = null; try { url = new URL(codeBase, filename); } catch (java.net.MalformedURLException e) { System.out.println("Couldn't create image: badly specified URL"); return null; } return url; }
La clase ImageIcon proporciona otros muchos constructores para crear iconos desde un array de bytes, una imagen o desde un nombre de fichero.
Ahora veamos el c�digo que carga las fotograf�as.
//where the member variables are declared Vector pictures; ... //early in the init method pictures = parseParameters(); //create the image icon for the photo Photo first = (Photo)pictures.firstElement(); ImageIcon icon = new ImageIcon(getURL(first.filename)); first.setIcon(icon); ...
Este c�digo crea un Vector de objetos Photo (en el m�todo parseParameters que no se muestra). Cada objeto Photo contiene el nombre, el capti�n, la anchura y la altura de la foto que representa, y despu�s de que la imagen se muestre por primera vez, su icono. El icono para la primera foto es creado en el m�todo init del applet y almacenado en el objeto Photo apropiado.
Los iconos para las otras fotos se almacenan la primera vez que el usuario las ve. Aqu� est� el c�digo del m�todo actionPerformed de buttons que determina si una imagen ha sido visualizada con anterioridad. Si no, el c�digo crea un nuevo icono y lo almacena.
Photo pic = (Photo)pictures.elementAt(current); icon = pic.getIcon(); if (icon == null) { icon = new ImageIcon(getURL(pic.filename)); pic.setIcon(icon); } iconLabel.setText(""); iconLabel.setIcon(icon); iconLabel.setToolTipText(pic.filename + ": " + icon.getIconWidth() + " X " + icon.getIconHeight());
�Por qu� todo este alboroto para almacenar los iconos? El programa corre mucho m�s r�pido porque los iconos son creados s�lo una vez y las correspondientes im�genes tambi�n solo se cargan una vez. Si eliminamos explicitamente el almacenamiento de iconos de este prorama, una segunda visualizaci�n de un foto parecer� suceder m�s r�pidamente que la primera. Esto implica que alg�n almacenamiento impl�cito est� sucediendo en la plataforma Java. Sin embargo, esto es un efecto colateral de la implementaci�n y no est� garantizado.
El c�digo tambi�n selecci�n el tool-tip de la foto: el programa llama a los m�todos getIconWidth y getIconHeight de IgameIcon para obtener informaci�n sobre el tool-tip. La anchura proporcionadas por el icono son m�s correctas que las proporcionadas por los par�metros del applet.
�El API de Icon
La siguientes tablas listan los m�todos y constructores m�s usados de ImageIcon. El API para isar Iconos se divide en tres categor�as.
�Seleccionar u Obtener la Imagen Dibujada por el Icono
M�todo o Constructor | Prop�sito |
---|---|
ImageIcon(byte[])
ImageIcon(byte[], String) ImageIcon(Image) ImageIcon(Image, String) ImageIcon(String) ImageIcon(String, String) ImageIcon(URL) ImageIcon(URL, String) |
Crea un ejemplar de ImageIcon, inicializando su contenido con la imagen especificada. El primer argumento indica la fuente -- imagen, array de bytes, nombre de fichero o URL -- desde la que se deber�a cargar la imagen del icono. El segundo argumento, cuando existe, proporciona una descripci�n para la imagen. La descripci�n es una descripci�n corta y textual de la imagen que podr�a ser usada en varias formas, como texto alternativo de la imagen. |
void setImage(Image)
Image getImage() |
Selecciona u obtiene la imagen mostrada por el icono. |
�Seleccionar u Obtener Informaci�n sobre el Icono
M�todo | Prop�sito |
---|---|
void setDescription(String)
String getDescription() |
Selecciona u obtiene una descripci�n de la imagen. |
int getIconWidth()
int getIconHeight() |
Obtiene el tama�o de la imagen del icono. |
�Vigilar la Carga de la Imagen del Icono
M�todo | Prop�sito |
---|---|
void setImageObserver(ImageObserver)
ImageObserver getImageObserver() |
Selecciona u Obtiene un image observer para la imagen del icono. |
int getImageLoadStatus() | Obtiene el estado de la carga de la imagen del icono. El conjunto de valores devueltos por este m�todo est� definido por MediaTracker. |