Carga Der Imagenes en Java

4
En java, sin usar librería externas, podemos cargar imágenes de ficheros .gif, .jpg y .png Es distinta la carga de imágenes según estemos en una aplicación normal de escritorio o en un Applet. También es distinto si el fichero está en el disco duro o si esta dentro del fichero .jar de nuestra aplicación. Cargar imágenes desde un Applet Si estamos en un Applet, sólo podemos cargar imágenes del servidor web donde esté nuestra página html y nuestro .class del Applet. Es decir, debemos poner la imagen en el servidor web. La carga se realiza por medio de los métodos que tiene la clase Applet. public class MiApplet extends Applet { public void init() { Image imagen = getImage (getDocumentBase(), "fichero.gif"); } } Con getDocumentBase() obtenemos la dirección de la página html. Luego el fichero .gif debe darse con path relativo a la ubicación de nuestra página html. En el ejemplo, la página está en el mismo directorio que la imagen y por eso se pone el nombre tal cual. Otro tema es que hayamos hecho un jar con nuestro Applet y la imagen esté dentro del jar. Entonces la carga se haría como se comenta en el apartado de cargar imagen desde un jar. Cargar imagen en una aplicación de escritorio Una forma fácil es con la clase ImageIcon, que de paso sirve para meter directamente en un botón o etiqueta ImageIcon icono = new ImageIcon("/path_absoluto/fichero.gif"); JButton boton = new JButton (icono); // Si queremos la imagen Image imagen = icono.getImage();

Transcript of Carga Der Imagenes en Java

Page 1: Carga Der Imagenes en Java

En java, sin usar librería externas, podemos cargar imágenes de ficheros .gif, .jpg y .png

Es distinta la carga de imágenes según estemos en una aplicación normal de escritorio o en

un Applet. También es distinto si el fichero está en el disco duro o si esta dentro del

fichero .jar de nuestra aplicación.

Cargar imágenes desde un Applet

Si estamos en un Applet, sólo podemos cargar imágenes del servidor web donde esté nuestra

página html y nuestro .class del Applet. Es decir, debemos poner la imagen en el servidor web.

La carga se realiza por medio de los métodos que tiene la clase Applet.

public class MiApplet extends Applet { public void init() { Image imagen = getImage (getDocumentBase(), "fichero.gif"); } }

Con getDocumentBase() obtenemos la dirección de la página html. Luego el fichero .gif debe darse

con path relativo a la ubicación de nuestra página html. En el ejemplo, la página está en el mismo

directorio que la imagen y por eso se pone el nombre tal cual.

Otro tema es que hayamos hecho un jar con nuestro Applet y la imagen esté dentro del jar.

Entonces la carga se haría como se comenta en el apartado de cargar imagen desde un jar.

Cargar imagen en una aplicación de escritorio

Una forma fácil es con la clase ImageIcon, que de paso sirve para meter directamente en un botón

o etiqueta

ImageIcon icono = new ImageIcon("/path_absoluto/fichero.gif"); JButton boton = new JButton (icono); // Si queremos la imagen Image imagen = icono.getImage();

El path puede ser absoluto, como en el ejemplo, o relativo al directorio donde se está ejecutando

nuestro programa. Si estás en un IDE (eclipse, netbeans, Jbuilder) el directorio de ejecución suele

ser el directorio donde está el proyecto, por lo que si el proyecto dice que pongas las imágenes, por

ejemplo, en proyecto/src/Icons/fichero.gif, entonces el path relativo de carga es

// fíjate que el path empieza sin /

Page 2: Carga Der Imagenes en Java

ImageIcon icono = new ImageIcon("src/Icons/fichero.gif");

Para saber con exactitud el directorio de ejecución, puedes probar esto

System.out.println("Directorio ejecucion = " + System.getProperty("user.dir"));

y a partir del resultado, puedes determinar el path relativo.

Otra forma de cargar la imagen es con el Toolkit, de esta manera

Image imagen = Toolkit.getDefaultToolkit().getImage ("/path_absoluto/fichero.gif");

Cargar una imágen dentro del .jar

Si el fichero de imagen está dentro del fichero del jar, debemos elegir una clase cualquiera que

esté dentro de ese mismo jar, pedirle su ClassLoader y usarlo para cargar la imagen. Si la imagen

está por ejemplo en el raiz dentro del jar y se llama serpi.gif, el código puede ser este

URL urlDeLaImagen = UnaClaseCualquiera.class.getClassLoader().getResource("serpi.gif"); ImageIcon icono = new ImageIcon(urlDeLaImagen); JLabel label = new JLabel(icono); // o bien, si queremos la imagen Image imagen = icono.getImage();

Esperar la carga de la imagen

Cuando llamamos a cualquiera de estos métodos para cargar la imagen, la carga puede tardar y se

hace en "background". Cualquiera de estos métodos nos devuelve el control inmediatamente,

aunque la imagen todavía no se ha cargado.

El resultado es que nuestra ventana puede aparecer sin nuestra imagen y no aparecer hasta que le

hagamos un refresco, bien desde código, bien "estirando" la ventana con el ratón o cualquier otro

método.

Para evitar esto, necestiamos quedarnos parados y no seguir con nuestro código hasta que

termine la carga de la imagen. Esto se consigue con la clase MediaTracker. Esta clase se encarga

de observar como va la carga de la imagen y tiene métodos que nos permiten esperar a que

termine.

JLabel label = new JLabel();

Page 3: Carga Der Imagenes en Java

MediaTracker media = new MediaTracker(label); Image imagen = Toolkit.getDefaultToolkit().getImage ("fichero.gif"); media.addImage(imagen, 23); try { media.waitForID(23); } catch (InterruptedException e) { System.out.println ("Me han interrumpido"); System.out.println ("Puede que la imagen todavía no haya terminado de cargarse"); }

Creamos el componente sobre el que vamos a dibujar la imagen, en nuestro ejemplo un JLabel y

creamos el MediaTracker pasándole este componente en el constructor.

Luego cargamos la imagen de la forma habitual y se la pasamos al MediaTracker por medio

de addImage(). También hay que pasar a este método un entero que nos inventemos que sirve de

identificador de la imagen. Debemos usar un entero distinto por cada imagen que metamos en

el MediaTracker y puede ser el que nos dé la gana.

Finalmente, esperamos la carga de la imagen con waitForID(), pasando el entero que nos sirve

para identificar la imagen.

Debemos capturar la excepción de que alguien mande una interrupción al hilo, con lo que

el waitForID() se saldría sin terminar la carga de la imagen. También tenemos

métodos checkID() para comprobar si la imagen ha terminado de cargarse y getErrorsID() para

tener una lista de errores por los que haya fallado una carga de imagen.

Si usamos un ImageIcon para cargar la imagen, no hace falta el MediaTracker, ya que ImageIcon

lo tiene internamente y lo utiliza.

Resumen

Las imágenes en los Applets deben estar en el servidor y cargarse con el

método getImage() del Applet.

Las imágenes dentro del jar deben cargarse usando el ClassLoader

Las imágenes de aplicaciones de escritorio se cargan directamente desde fichero o de dentro

del jar.

Las imágenes se cargan en background. Podemos usar MediaTracker para esperar que

termine la carga.