Hola
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:
public class Main
extends JFrame {
// Ancho y alto de la ventana
private final int ANCHO = 800;
private final int ALTO = 600;
// El media tracker
// El fondo
Fondo fondo;
/***************************************************************************
************************** INCIALIZAR **************************
***************************************************************************/
public static void main
(String[] args
) { new Main
(); }
Main()
{
// Inicializamos los objetos
tracker
= new MediaTracker(this); // El media tracker que usaré comúnmente a todas las clases 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();
}
{
Image mImagen
= createImage
(ANCHO, ALTO
);
g2.drawImage(mImagen, 0, 20, this);
}
}
Fondo.java:
public class Fondo
{
// Propiedades de las imágenes
private final String rutaImagen
= "imagenes/fondo.gif";
public final int anchoImagen = 800;
public final int altoImagen = 600;
/***************************************************************************
*************************** CONSTRUCTORAS ***************************
***************************************************************************/
{
// Inicializamos el buffer sobre el que pintaremos
// Dibujamos dentro del buffer el fondo
Image aux
= Toolkit.
getDefaultToolkit().
getImage(Main.
class.
getResource(rutaImagen
));
// 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...
try{tracker.
waitForAll();}catch(Exception e
){} }
/***************************************************************************
*************************** 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.html1S4ludo y gracias