Carga Der Imagenes en Java
-
Upload
macbenachelcid1 -
Category
Documents
-
view
98 -
download
4
Transcript of Carga Der Imagenes en Java
![Page 1: Carga Der Imagenes en Java](https://reader036.fdocuments.ec/reader036/viewer/2022082413/5572112e497959fc0b8e86e7/html5/thumbnails/1.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022082413/5572112e497959fc0b8e86e7/html5/thumbnails/2.jpg)
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](https://reader036.fdocuments.ec/reader036/viewer/2022082413/5572112e497959fc0b8e86e7/html5/thumbnails/3.jpg)
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.