Probleme Thread et repaint [Résolu]

Karibou95 13 Messages postés mardi 27 février 2007Date d'inscription 17 octobre 2008 Dernière intervention - 7 oct. 2008 à 21:30 - Dernière réponse : Karibou95 13 Messages postés mardi 27 février 2007Date d'inscription 17 octobre 2008 Dernière intervention
- 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();
}
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
cs_laurent1024 987 Messages postés mardi 31 mai 2005Date d'inscription 30 août 2012 Dernière intervention - 8 oct. 2008 à 09:12
3
Merci
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();

Merci cs_laurent1024 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_laurent1024
Meilleure réponse
Twinuts 5279 Messages postés dimanche 4 mai 2003Date d'inscription 19 septembre 2018 Dernière intervention - 8 oct. 2008 à 13:25
3
Merci
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

Merci Twinuts 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Twinuts
Meilleure réponse
cs_laurent1024 987 Messages postés mardi 31 mai 2005Date d'inscription 30 août 2012 Dernière intervention - 8 oct. 2008 à 16:25
3
Merci
Tu n'aurais pas oublié de faire le setMonCanvas ?

Merci cs_laurent1024 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_laurent1024
sheorogath 2465 Messages postés samedi 21 février 2004Date d'inscription 29 janvier 2010 Dernière intervention - 8 oct. 2008 à 10:18
0
Merci
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"
Commenter la réponse de sheorogath
Karibou95 13 Messages postés mardi 27 février 2007Date d'inscription 17 octobre 2008 Dernière intervention - 8 oct. 2008 à 12:47
0
Merci
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 :)
Commenter la réponse de Karibou95
Karibou95 13 Messages postés mardi 27 février 2007Date d'inscription 17 octobre 2008 Dernière intervention - 8 oct. 2008 à 15:58
0
Merci
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 ?
Commenter la réponse de Karibou95
cs_laurent1024 987 Messages postés mardi 31 mai 2005Date d'inscription 30 août 2012 Dernière intervention - 8 oct. 2008 à 16:09
0
Merci
Essaye un e.printStackTrace(); à la place du System.err.print("MARCHE PO LE THREAD O_o");
Tu aura deja plus d'info à nous donner.
Commenter la réponse de cs_laurent1024
Karibou95 13 Messages postés mardi 27 février 2007Date d'inscription 17 octobre 2008 Dernière intervention - 8 oct. 2008 à 16:19
0
Merci
^^ 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 :(
Commenter la réponse de Karibou95
Karibou95 13 Messages postés mardi 27 février 2007Date d'inscription 17 octobre 2008 Dernière intervention - 8 oct. 2008 à 17:00
0
Merci
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
Commenter la réponse de Karibou95

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.