Estoy realizando una aplicación que me tiene que pintar sobre un JFrame una imagen de fondo (cargada en un BufferedImage) e ir pintando dentro de ese mismo BufferedImage distintas figuras geométricas.
El problema es que la imagen de fondo es de tamaño 800x600 que se pinta en la constructora de la clase "Fondo" y no le da tiempo. Pongo el código y luego explico con más detalle:
Main.java:
Código
{ // Ancho y alto de la ventana private final int ANCHO = 800; private final int ALTO = 600; // El media tracker MediaTracker tracker; // El fondo Fondo fondo; /*************************************************************************** ************************** INCIALIZAR ************************** ***************************************************************************/ Main() { // Inicializamos los objetos fondo = new Fondo(tracker); // Inicializamos las propiedades de la ventana this.setTitle("Roimpiendo texturas"); this.setSize (ANCHO, ALTO); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setLocation(150, 150); this.setVisible(true); } /*************************************************************************** ************************** DIBUJAR ************************** ***************************************************************************/ { fondo.dibujar(g2, tracker); repaint(); } { g2.drawImage(mImagen, 0, 20, this); } }
Fondo.java:
Código
public class Fondo { // Propiedades de las imágenes public final int anchoImagen = 800; public final int altoImagen = 600; /*************************************************************************** *************************** CONSTRUCTORAS *************************** ***************************************************************************/ { // Inicializamos el buffer sobre el que pintaremos // Dibujamos dentro del buffer el fondo // Añadimos las imagenes al MediaTracker tracker.addImage(aux, 0); g.drawImage(aux, 0, 0, null); // Aquí intento que espere hasta que esté pintado pero sin éxito... } /*************************************************************************** *************************** DIBUJAR *************************** ***************************************************************************/ { g2.drawImage(imagen, 0, 0, null); //try{tracker.waitForAll();}catch(Exception e){} // ¿Es necesario? } }
Como podéis ver el mecanismo de la clase fondo es simple, en la constructora dibuja el fondo (se supone que el objeto MediaTracker debería esperar a que lo hiciese...) y en el método dibujar simplemente dibuja el BufferedImage ya que hay otros métodos encargados de dibujar sobre el mismo figuras geométricas como decía al principio.
Ahora mis dos dudas:
1 - ¿Cómo puedo hacer que realmente el programa espere a que el fondo esté pintado?
2 - ¿Está bien inicializado el objeto MediaTracker? Ya que no entiendo muy bien la explicación de la constructora en la documentación:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/MediaTracker.html
1S4ludo y gracias