Java - Algo Curioso

 
Vista:

Algo Curioso

Publicado por Ronald (16 intervenciones) el 11/11/2006 04:14:43
Hola a todos.

estoy trabajando con netbeans en linux. Hice una aplicacion para probar como mostrar imagenes en el frame y me tope con algo raro.

Para dibujar la imagen hago esto que esta dentro de un boton:

img = Toolkit.getDefaultToolkit().getImage("/home/ronald/Pictures/computadora2.gif");
graf.drawImage(img,100,100,this);

Donde img y graf son globales de tipo Image y Graphics respectivamente.
El problema es que tengo que hacer dos click al boton para que realmente se muestre la imagen, siempre 2 veces.

Alguna idea de que pueda ser?

Saludos...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Algo Curioso

Publicado por Tom (16 intervenciones) el 11/11/2006 10:31:32
Habría que ver más código. Quizás tengas que llamar a algún método update() o similar del control donde dibujas la imagen.

Por cierto, drawImage() puede retornar false si no termina correctamente, y no lo estás comprobando.

Además, no es conveniente "guardar" objetos Graphics. La mejor manera de usarlos suele ser obteniéndolos cada vez que es necesario:

objetodestino.getGraphics().drawImage(...);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Algo Curioso

Publicado por chuidiang (950 intervenciones) el 11/11/2006 16:44:43
Hola:

El dibujo de cualquier cosa, imagen por ejemplo, debe hacerse heredando de un componente y redefiniendo el método paint().

La carga de imágenes se hace en background. Cuando haces el getImage(), el método vuelve inmediatamente, incluso aunque la imagen no se haya terminado de cargar. Cuando visualizas la ventana, es posible que no esté cargada y hasta que no termine de cargarse y hagas un repaint del componente, no se verá.

Una forma de evitarlo es esperando que la imagen se cargue. Para eso tienes la clase MediaTracker, que se usa así

MediaTracker tracker = new MediaTracker(componenteSobreElQueQuieresDibujarLaImagen);
tracker.addImage (Toolkit.getDefaultToolkit().getImage(...), unEnteroCualquiera);
tracker.waitForId(unEnteroCualquiera);

La última llamada se queda bloqueada hasta que la imagen se haya cargado definitivamente. Entonces ya puedes dibujar.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Algo Curioso

Publicado por Ronald (16 intervenciones) el 11/11/2006 22:49:20
La verdad es que no me sirve heredar del componente y sobreescribir el metodo paint, porque la imagen se va estar moviendo constantemente.

Ya probe con esperar a que termine de cargar la imagen y me di cuenta que ese no es el problema, sino que de alguna manera la primera vez que muestro la imagen (click en el boton) se muestra pero inmediatamente despues se borra la imagen lo cual hace paracer que no se muestra. Y la segunda vez que muestro la imagen (2do click en el boton) no se borra y la imagen se queda visible.

Alguien sabe que puede ser?

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar