Probleme Thread et repaint

Résolu
Karibou95 Messages postés 13 Date d'inscription mardi 27 février 2007 Statut Membre Dernière intervention 17 octobre 2008 - 7 oct. 2008 à 21:30
Karibou95 Messages postés 13 Date d'inscription mardi 27 février 2007 Statut Membre Dernière intervention 17 octobre 2008 - 8 oct. 2008 à 17:00
Bonjour,

J'ai plusieurs questions :

Tout d'abord j'ai crée un canvas dans lequel je voudrais faire bouger un point , le probleme c'est que avec repaint(); le point se déplace mais ne s'efface pas au fur et à mesure :( donc au bout d'un moment on voit plus qu'une droite et pas un rond qui se déplace. ^^

De plus j'ai mis la couleur de fond de mon canvas en noir et quand je fais un thread, temps que le thread ne c'est pas terminé au moins une fois le fond de mon canvas et blanc o_o et redevient noir ensuite !? je ne comprend pas d'ou cela provient .

Voici en gros ma méthode paint :

public void paint (Graphics g)
{
for(int j=25;j<470;j++) // ici le for permet de crée des ronds jusqua l'endroit souhaité
{

g.fillOval(j,j,10,10);
Thread.sleep(50);
setForeground(Color.BLACK);

}
repaint();
}

9 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
8 oct. 2008 à 09:12
Quelque remarques :
1. Pour mettre une couleur de fond c'est setBackground et non setForeground.
2. Pour que la couleur de fond soit mise le plus rapidement possible il faut que tu met le setBackground en début de fonction.
3. il ne faut pas mettre de repaint dans la fonction paint.

Pour ce que tu veux faire il faut procéder de la manieres suivante.

public void paint (Graphics g)
{
   setBackground(Color.Black);
    g.fillOval(j,j,10,10);

}

protected int j=25;

public void incJ() {
    if (j < 470)
       j++;
}

et faire un thread qui a une méthode run avec
sleep(50);
lePanel.incJ();
lePanel.repaint();
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
8 oct. 2008 à 13:25
Salut,

utilise un setter...

exemple :

public class PaintThread extends Thread {
  ...
  private JPanel monPanel = null;
  ...

  public void setMonPanel(JPanel monPanel) {
    this.monPanel = monPanel;
  }
  ...
}

et dans la classe qui contient le panel tu fais
PaintThread pt = ...
JPanel monPanel = ...
...
pt.setMonPanel(monPanel);
...

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
3
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
8 oct. 2008 à 16:25
Tu n'aurais pas oublié de faire le setMonCanvas ?
3
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
8 oct. 2008 à 10:18
Puis heu si tu es en swing c'est paintComponent qu'il faut surcharge

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0

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

Posez votre question
Karibou95 Messages postés 13 Date d'inscription mardi 27 février 2007 Statut Membre Dernière intervention 17 octobre 2008
8 oct. 2008 à 12:47
merci pour vos réponses néanmoins il me reste une petite erreur :(

quand je crée ma class PaintThread qui etends Thread avec mon run , il ne reconnais pas mon panel car il se trouve dans une autre class, comment faire pour le récuperer alors que je ne peut pas etends paintthread car il y'a deja extends?

dsl si la question est bete mais je commence juste :)
0
Karibou95 Messages postés 13 Date d'inscription mardi 27 février 2007 Statut Membre Dernière intervention 17 octobre 2008
8 oct. 2008 à 15:58
Merci ça ma beaucoup aidé ta reponse :)

j'arrive a appeller mon Canvas

mais pas de chance j'ai encore une erreur dans le thread, quand je compile le TRy de mon thread ne se lance pas j'ai juste le catch o_o

voici mon thread :

class PaintThread extends Thread{

private Canvas_Repere Dessiner_Repere = null;

public void setMonCanvas(Canvas_Repere Dessiner_Repere) {
this.Dessiner_Repere = Dessiner_Repere;
}


public void run() {

try{
Dessiner_Repere.incJ();
Dessiner_Repere.repaint();
sleep(500);
System.out.println("TRY");
}

catch (Exception e) {

System.err.print("");
System.err.print("MARCHE PO LE THREAD O_o");
System.err.print("");
}
}
}

au dessus de mon thread dans ma class Canvas_Repere j'ai la méthode incJ, j'ai mon fillOval au debut de ma méthode paint et protected j = 25; au début de ma class Canvas_Repere.

quand j'essais de mettre :

Dessiner_Repere.incJ();
Dessiner_Repere.repaint();

en commentaire j'arrive à lire le TRy sinon ça marche po :(
peut etre mon erreur vient elle du fait que j'appelle un canvas et non un panel?
dans ce cas il faut peut etre que je crée un panel dans lequel je mettrais mon canvas ?
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
8 oct. 2008 à 16:09
Essaye un e.printStackTrace(); à la place du System.err.print("MARCHE PO LE THREAD O_o");
Tu aura deja plus d'info à nous donner.
0
Karibou95 Messages postés 13 Date d'inscription mardi 27 février 2007 Statut Membre Dernière intervention 17 octobre 2008
8 oct. 2008 à 16:19
^^ j'ai testé e.printStackTrace(); il me dit :


java.lang.NullpointerException at PaintThread.run(IHM.java :723)

la ligne 723 correspond à ça :

Dessiner_Repere.incJ();

juste en dessus de mon try{

ouin :(
0
Karibou95 Messages postés 13 Date d'inscription mardi 27 février 2007 Statut Membre Dernière intervention 17 octobre 2008
8 oct. 2008 à 17:00
non j'ai bien mis le setMonCanvas mais j'avais fait une erreur de frappe dans mon try arf :(


par contre maintenant il ne parcours plus du tout mon thread o_o aucun message ne s'affiche !?

mon fichier IHM et de la sorte :

une class Canvas_Repere

en dessous une class Painthread et en dessous ma class interface_Graphique avec :
PaintThread pt = ...
JPanel monPanel = ...
...
pt.setMonPanel(monPanel);
...


bizarre
0
Rejoignez-nous