Faire une attente entre 2 affichage d'image

Faire une attente entre 2 affichage d'image - Java - Programmation

Marsh Posté le 19-02-2006 à 22:38:08    

g.drawImage((new ImageIcon("0.gif" )).getImage(),200,200,null);
g.drawImage((new ImageIcon("1.gif" )).getImage(),200,200,null);
 
J'aimerais faire une pti tps d'attente entre les 2 affichages d'image (qui sont superposés) pour faire une sorte de ptite animation. Probleme quand je met un wait entre les 2 instructions, le prog fait bien un tps d'attente mais avant d'afficher la premiere image. Ce qui fait qu'il attend puis affiche les images donc on ne voit que la derniere image afficher.
 
Donc j'aurais voulu savoir comment faire pour avoir un tps d'attente qui me permettrais de voir la premiere image pendant par exemple 0,5s et de pouvoir realiser une mini animation.
 
Merci à tous.

Reply

Marsh Posté le 19-02-2006 à 22:38:08   

Reply

Marsh Posté le 20-02-2006 à 01:32:53    

Tu ferais bien d'utiliser un gif animé..

Reply

Marsh Posté le 20-02-2006 à 17:07:41    

Ouai mais je prefererais utiliser une succession d'images (5 ou 6) pour faire une ptite animation basique.

Reply

Marsh Posté le 21-02-2006 à 10:49:35    

humm, bizarre....
 
g  est bien le Graphics du paint(Graphics g)  ?
 
essais avec un getContentPane().getGraphics().drawImage(...)  (en supposant que c'est dans une JFrame et non une applet )
 
Sinon, dans la doc sur DrawImage, il y'a :
 
This method returns immediately in all cases, even if the complete image has not yet been loaded, and it has not been dithered and converted for the current output device.  
 
If the image has not yet been completely loaded, then drawImage returns false. As more of the image becomes available, the process that draws the image notifies the specified image observer.
 
essais avec un sleep() plus elevé pour voir si il peut afficher les 2 images l'une apres l'autre..
 
 
...Nous ne voyons pas d'autre explication...

Reply

Marsh Posté le 21-02-2006 à 11:32:53    

osok a écrit :


Probleme quand je met un wait entre les 2 instructions, le prog fait bien un tps d'attente mais avant d'afficher la premiere image.  


En fait si c'est comme sous windows, le drawimage ne dessine pas vraiment l'image dans la fenetre immediatement.
L'image est dessinée pendant un evenement du style onPaint() de la fenetre. Comme il y a 2 images succesives, tu ne vois que la derniere.
 
Il faudrait que tu fasse:
drawimage(1...)
UpdateWindows()->Cherche dans la doc de la classe fenetre pour trouver la methode correcte, methode qui fait se redessiner la fenetre.
wait()
drawimage(2...)
wait() etc.
 
Cela dit une methode plus correcte serait de
1-Creer un timer qui fait se redessiner la fenetre
2- Dans la methode onpaint de la fenetre tu dessine 1 seule image. le nom de fichier est dans un tableau dont l'indice change a chaque appel, comme ca l'image change a chaque appel.
 
(Cela dit il y a longtemps que je n'ai pas fait de java, donc surtout consulter la doc pour trouver les fonctions correctes dont je parle)

Reply

Marsh Posté le 21-02-2006 à 19:26:21    

class MaFenetre extends JFrame{
 private JPanel pan;
 
 MaFenetre(){
  setTitle("essai" );
  setSize(800,500);
  pan=new Paneau();
  getContentPane().add(pan);
 }
}
 
class Paneau extends JPanel{
 public void paintComponent(Graphics g){
  super.paintComponent(g);
  g.drawImage((new ImageIcon("1.gif" )).getImage(),200,200,null);
    g.drawImage((new ImageIcon("2.gif" )).getImage(),200,200,null);
     g.drawImage((new ImageIcon("3.gif" )).getImage(),00,200,null);
 }
}
 
public class PremTxt {
 public static void main (String args[]){
  MaFenetre fen=new MaFenetre();
  fen.setVisible(true);
 }
}

Reply

Marsh Posté le 21-02-2006 à 19:31:54    

Voilà mon pti bout de programme (dsl pour l'indentation).
 
Apparament il fait que je fasse un update (de la classe JFrame) mais le probleme c'est que la methode paintComponent est appelé "indirectement" par getContentPane() donc je peux pas passer la fenetre en parametre.
 
En fait je voudrais juste (pour tester) créer une fenetre puis d'afficher plusieurs images à la suite les unes des autres (avec un pti wait entre chaque image histoire de voir une mini animation).
Mais petit probleme je sais pas comment m'y prendre... Donc si vous pouviez m'aider c'est juste pour voir comment je pourrais faire une animation.
 
Merci.

Reply

Marsh Posté le 21-02-2006 à 23:56:26    

Salut,
c'est pas exactement comme ca que tu dois t'y prendre.
La methode paint() affiche appres ce que tu lui as dit d'afficher dedans.
En fait pour tes trois images successives, tu dois faire 3 appels a repaint() en changeant la valeur du nom de l'image a afficher. en gros ca donnerait:
 

Code :
  1. ...
  2. monImage = "image1";
  3. repaint();
  4. try{Thread.sleep();}catch(){}
  5. monImage = "image2";
  6. repaint();
  7. try{Thread.sleep();}catch(){}
  8. monImage = "image3";
  9. repaint();
  10. try{Thread.sleep();}catch(){}
  11. ...


 
et eventuellement dans une boucle while() pour faire une animation.
 
Bon courage  :hello:
 
EDIT: c'est peut-etre update au lieu de repaint, faut verifier les apis


Message édité par wapcamer le 21-02-2006 à 23:58:38

---------------
Voir les RAW sous Android: https://market.android.com/details? [...] .RawVision Blog Photo: http://photouch.me Applications mobiles: http://caketuzz.com Wapcam Project: http://wapcam.mobi
Reply

Marsh Posté le 22-02-2006 à 11:53:33    

Citation :

try{Thread.sleep();}catch(){}


 
[:pingouino]

Reply

Marsh Posté le 22-02-2006 à 14:01:53    

essai plutot de faire un  
 
this.setContentPane(Paneau); histoire que paneau soit le panel principal  ( du moins pour tester )
 
et essai de redefinir le paint(g)  de MaFenetre :
 
public void paint(Graphics g)
{
   mets les drawImages ici
}
 
En fait, la methode paintComponent doit etre appelé pour chaque composant du panel principal, et le resultat doit etre visible qu'a la fin de cette boucle donc ça t'affiche que la derniere image.
 
ça devrait marché avec ce que je te dis...

Reply

Marsh Posté le 22-02-2006 à 14:01:53   

Reply

Marsh Posté le 22-02-2006 à 14:07:07    

Sinon, sur le meme principe que wapcamer,
dans ton Paneau, tu peux mettre un tableau d'Image et une variable  compteur (int).  
Ensuite dans paintComponent() du paneau, tu fais compteur++,  et du affiche l'image qui correspond au compteur.
 
Le probleme c'est que tu ne maitrise pas les appels à paintComponent , alors l'animation n'aura pas un bon timing...
( sauf si dans MaFenetre tu appel repaint() en boucle avec un sleep()  )

Reply

Marsh Posté le 22-02-2006 à 23:19:22    

Merci beaucoup je vais tester ca dès demain (dure journée aujourd'hui lol) et je vous tiens au courant.

Reply

Marsh Posté le 24-02-2006 à 22:59:22    

Arf apparament j'ai pas trop compris le fonctionnement de l'affichage d'une image.  
Il sert à quoi le paneau en fait??? Et la methode paintComponent elle est appelé quand???

Reply

Marsh Posté le 26-02-2006 à 13:55:45    

et pourquoi pas faire un thread qui change l'image courante a affiché ? [:petrus75]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed