Swing y JFC (Java Foundation Classes)

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:
  1. Ejecuta el applet.

    El applet anterior se ejecuta usando Java Plug-in. Si lo prefieres, puedes ejecutarlo con un navegador o Applet Viewer que soporte JDK 1.1 y Swing. Aqu� est� el fichero que contiene la etiqueta <APPLET> para ejecutar el applet IconDemoApplet.java. Para m�s informaci�n sobre la ejecuci�n de applets, puedes ver Ejecutar Applets Swing.

  2. Pulsa los botones Previous Picture y Next Picture, para ver las fotos.
  3. Mant�n el cursor sobre una foto. Un tool-tip indicar� el nombre de la foto actual y su anchura y altura.
  4. PAra ver tus propias fotos, modifica los par�metros del applet. Necesitar�s proporcionar, el nombre, la anchura y la altura para cada foto. Durante la inicializaci�n, el applet lee sus par�metros y almacena la informaic�n en un vector de objetos Photo.

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR