Timer ? CA MARCHE PAS §?§

Asrull Messages postés 79 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 17 novembre 2004 - 29 juin 2004 à 16:40
ivantil Messages postés 25 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 29 janvier 2011 - 24 août 2006 à 10:35
piou piou piou ... ... ...
Voilà, je veux utiliser un Timer pour faire défiler à intervalle régulier plusieurs images contenues dans un Vector ... TestAnima est un JPanel qui implemente ActionListener pour capter le moment ou le timer se réveille et changer l'image afficher. le composant JImage est une des classes que g précedemment dévellopé qui s'occupe de charger l'image avec un MediaTracker. les images sont bien chargée, la fenêtre s'ouvre (jusque la pas de prb) et oh surprise le timer refuse de se mettre en route (System.out.println("Event de TestAnima"); ne s'affiche pas une seule fois dans mon ptit dos)... et donc les images ne défilent pas.
par contre je sais que toutes les images sont chargée parceque (accrochez vous...) quand je tripote la fenêtre (je la redimensionne à coup de souris) la l'image change mais sans appeler aucune des méthode actionPerformed (toujours pas de "Event de TestAnima"), il les affiche bien dans l'ordre sauf que de temps en temps (comme ça quand ça lui plait) il en saute une ou deux ...

Si qqun voit ce qui cloche je serais trétra content qu'il me l'explique passke là je suis à bout de neurones. (BoiteCranienneException migraine).

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Image;
import java.awt.Graphics;
import java.awt.Dimension;
import javax.swing.Timer;
import java.util.Vector;

public class TestAnima extends JPanel implements ActionListener
{
Vector scene;
Timer timer;
int currentImage;
Image nextImage;

public TestAnima()
{
setPreferredSize(new Dimension(50,50));

scene=new Vector();

scene.add(new JImage("img\\Bleu.gif").getImage());
scene.add(new JImage("img\\Gris.gif").getImage());
scene.add(new JImage("img\\Marron.gif").getImage());
scene.add(new JImage("img\\Mauve.gif").getImage());
scene.add(new JImage("img\\Noir.gif").getImage());
scene.add(new JImage("img\\Rouge.gif").getImage());
scene.add(new JImage("img\\Vert.gif").getImage());

Timer timer=new Timer(100,this);
timer.start();

}

public void actionPerformed(ActionEvent e)
{
if(e.getSource()==timer)
{
repaint();
System.out.println("Event de TestAnima");
}
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(getNextImage(),0,0,this);
}

private Image getNextImage()
{
currentImage++;
if (currentImage==scene.size()) currentImage=0;
System.out.println(currentImage);
return((Image)scene.elementAt(currentImage));
}

}

class BidFrame extends JFrame implements ActionListener
{
public BidFrame(){getContentPane().add(new TestAnima());}
public void actionPerformed(ActionEvent e){System.out.println("Event de BidFrame");}

public static void main(String argmts[])
{
BidFrame frame=new BidFrame();
frame.pack();
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}
}

Oobaï TaPou !

10 réponses

wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
29 juin 2004 à 16:48
j'utilise le tiimer plutot sous la forme

Timer timer=new Timer();
timer.scheduleAtFixedRate(task,delay,period);
0
Asrull Messages postés 79 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 17 novembre 2004 1
29 juin 2004 à 17:02
... oui mais c'est le Timer de Util ça ... faut que j'utilise le Timer Swing

Oobaï TaPou !
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
30 juin 2004 à 08:46
En virant le e.getSource()==timer
0
Asrull Messages postés 79 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 17 novembre 2004 1
30 juin 2004 à 09:30
Ben, si je fais ça comment je fais pour savoir que c le timer qui a créé l'event ? pour l'instant c'est un test mais par la suite j'aurais plusieurs Event à contrôler dans mon actionperformed ...

Oobaï TaPou !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
30 juin 2004 à 10:20
sinon utilise

Timer timer=new Timer(100,new ActionListener(){
public void actionPerformed(ActionEvent e){
time();
}
});

public time(){
posImage++;
repaint();
}
0
Asrull Messages postés 79 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 17 novembre 2004 1
30 juin 2004 à 11:59
cool ça marche... marci
Mais comment ça se fait que ça marchais pas comme je l'ai fait, j'ai beau tout retourner dans ma tête mais logiquement ça doit marcher aussi avec ce que j'ai fait ... là je vois que l'on recréer en direct un actionlistener mais pourquoi ça ne veut pas marcher si c'est le JPanel le ActionListener, ma méthode ActionPerformed n'est pas bien définie ?

JE VEUX COMPRENDRE !

Oobaï TaPou !
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
1 juil. 2004 à 09:28
quelquefois il vaut mieux ne pas comprendre :)
0
Asrull Messages postés 79 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 17 novembre 2004 1
1 juil. 2004 à 15:14
Ben visiblement c'est la condition if(e.getSource()==timer)
qui sort false, et si je pige pas pourquoi cette condition ne me sort pas true, c'est que je suis incapable d'employer les ActionEvent... Perspective assez handicapante en java ...
J'ai beau chercher et recherche dans les sources et sur le tutorial de sun , je vois pas par quelle autre méthode il faut que j'identifie l'event de timer ...
Si je trouve pas je vais finir par ne plus dormir...
Oobaï TaPou !
0
alaincanu Messages postés 1 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 22 décembre 2005
22 déc. 2005 à 14:36
Bonjour,

La variable timer était déclarée 2 fois (une fois dans la classe, une fois en local). Etait-ce voulu ?
0
ivantil Messages postés 25 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 29 janvier 2011
24 août 2006 à 10:35
Je pense qu'il faut que tu cast la variable ressortie par ton e.getSource().
et pis il faut que tu utilise la fonction equals plutot que le ==. je crois que le == ne fonctionne qu'avec les int, float, boolean etc, mais pas avec les objet.


je sais pas si je suis bien clair..... essaye quelque chose comme ca:


public void actionPerformed(ActionEvent e)
{
   try
   {
      if(((Timer)(e.getSource())).equals(timer))
      {
         repaint();
         System.out.println("Event de TestAnima");
      }
   }
}

--==IvanTil==--
0