IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

[AWT] Peut-on choisir de lancer la méthode paint()


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Points : 40
    Points
    40
    Par défaut [AWT] Peut-on choisir de lancer la méthode paint()
    Bonjour à tous, je vais d'abord expliquer mon problème. Ce que je voudrais, c'est lancer la méthode paint(), une fois que mon thread est lancé. En clair, je voudrais que dans le run() de mon thread, je lance la méthode paint(). Est ce que c'est possible, parce qu'en regardant plusieurs topics sur le forum, je n'ai pas trouvé la réponse. .

    PS: désolé, je ne savais pas que c'était de l'awt


    [Modéré par Didier] : ajout de tag dans le titre - Les règles du forum Java
    Si tu tapes ta tête contre une cruche et que ça sonne creux, ce n'est pas forcément la cruche qui est vide !!
    Mes topics sont tabous, vous en viendrez tous à bout.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    yaurait pas une méthode repaint par hasard :

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Points : 40
    Points
    40
    Par défaut
    Je connais à peine cette méthode, tu pourrais me dire à quoi elle sert, et comment elle marche?
    Si tu tapes ta tête contre une cruche et que ça sonne creux, ce n'est pas forcément la cruche qui est vide !!
    Mes topics sont tabous, vous en viendrez tous à bout.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    je ne peux pas t'en dire beaucoup,
    c'est juste que tu peux l'appeler quand tu veux
    (car paint tu ne peux pas l'appeler "à la main" il me semble),
    et elle se charge d'appeler la méthode paint qui prendra en compte les éventuelles modifications que tu as apporté à ce qu'il faut dessiner.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Pardonne-moi, noobiewan kenobi, mais je ne comprends pas bien ton problème. Depuis ton thread, tu peux appeler la méthode repaint() de n'importe quel composant graphique : il suffit que le thread le connaisse (par exemple en le passant en paramètre au thread).

    Nicolas

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    heu, en fait elle est dans quelle classe ta méthode paint ?
    Bon, je te dis ça juste parceque j'ai touché des méthodes similaires en J2ME, mais bon, c'est peut être différent dans ton cas .....

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Points : 40
    Points
    40
    Par défaut
    En fait je travaille sur une application J2ME. Donc je commence par un midlet, puis j'ai besoin d'un thread, et une fois dans ce thread, il faut que j'affiche une image.

    Dans mon code, une fois que je suis dans le thread, la méthode paint() se lance de suite, meme si je ne mets rien dans le run()
    Si tu tapes ta tête contre une cruche et que ça sonne creux, ce n'est pas forcément la cruche qui est vide !!
    Mes topics sont tabous, vous en viendrez tous à bout.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    comment tu l'affiches ton images ? tu utilises un Canvas ?
    si c'est ce cas, alors la méthode paint est appelée quand tu fais un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    display.setCurrent(tonCanvas);
    après pour modifier l'affichage, tu modifie ce que tu veux dans ton canvas, tu fais

    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    display.setCurrent(tonCanvas);
    pour afficher les modifications.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Points : 40
    Points
    40
    Par défaut
    ouais, mais il y a autre chose, c'est que dans ma 1er classe, j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public void startApp() 
        { 
        	Class2 x = new Class2 (this); 
        	display.setCurrent(x);
        }
    et le paint est dans la Class2...
    Si tu tapes ta tête contre une cruche et que ça sonne creux, ce n'est pas forcément la cruche qui est vide !!
    Mes topics sont tabous, vous en viendrez tous à bout.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    oui mais si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x.repaint();
    display.setCurrent(x);
    ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Points : 40
    Points
    40
    Par défaut
    si je le fais à la suite, ça ne fait rien, il les prends pas en compte... j'ai testé avec des System.out.println
    Si tu tapes ta tête contre une cruche et que ça sonne creux, ce n'est pas forcément la cruche qui est vide !!
    Mes topics sont tabous, vous en viendrez tous à bout.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 169
    Points : 113
    Points
    113
    Par défaut
    entre temps il faut toi dans ton code que tu fasses les modifs necessaires, afin de voir un changement quand tu appelles la fonction repaint();

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Points : 40
    Points
    40
    Par défaut
    en fait, si je demandais ça, c'était pour contrôler l'affichage de l'image, qui apparaît avant l'exécution du run() de mon thread. Ensuite, le but de mon application, sera d'actualiser le plus souvent l'image, or quand je mets ce bout de code dans le paint, seule la 4eme image apparaît, alors que si je fais réduction de l'émulateur, puis agrandissement, mon code marche. Le code du paint avec les 4 images est le suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
          try 
          { 
             int i = 1; 
             while(i<5) 
             { 
                Image theImage = Image.createImage("/msn" + i + ".PNG"); 
                try 
                { 
                   Thread.sleep(5000); 
                } 
                catch (InterruptedException e1) 
                { 
                   e1.printStackTrace(); 
                } 
                System.out.println(i); 
                g.drawImage(theImage, 0, 0, 0); 
                i++; 
                repaint(); 
             }    
          } 
          catch (IOException e) 
          { 
             e.printStackTrace(); 
          }
    Si tu tapes ta tête contre une cruche et que ça sonne creux, ce n'est pas forcément la cruche qui est vide !!
    Mes topics sont tabous, vous en viendrez tous à bout.

  14. #14
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Le code que tu as donné est bien celui de la méthode paint() ?
    Il faut séparer le paint proprement dit, dont le rôle est juste d'afficher une image, des demandes de "re-dessinement".


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    private Image theImage;
     
    public void paint(Graphics g) {
      if (theImage != null) {
        g.drawImage(theImage, 0, 0, 0); 
      }
    }
     
    public void run() {
      for (int i = 1; i < 5; i++) {
        try {
          theImage = Image.createImage("/msn" + i + ".PNG"); 
          try { 
            Thread.sleep(5000); 
          } 
          catch (InterruptedException e1) {} 
     
          repaint();
        } 
        catch (IOException e)  { 
          e.printStackTrace(); 
        }
     
      }
    }

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Points : 40
    Points
    40
    Par défaut
    Je vous remercie à tous les deux pour vos explications, et surtout herve91, merci pour ce code, qui me montre plus clairement les choses. Par contre, une chose quand même m'étonne : avec ton code, on perd la première image, car elle ne s'affiche pas. Si j'ai bien compris ton code, elle devrait s'afficher d'abord avec la méthode paint(), puis les autres apparaissent avec repaint(), non?
    Si tu tapes ta tête contre une cruche et que ça sonne creux, ce n'est pas forcément la cruche qui est vide !!
    Mes topics sont tabous, vous en viendrez tous à bout.

  16. #16
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    A quel moment veux-tu que la première image soit affichée ? dès création de l'instance de l'objet ?
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class MaClasse extends ??? {
      public MaClasse () {
        theImage = Image.createImage("/msn" + 0 + ".PNG");
      }
    }
    Tu peux prévoir des méthodes getFirstImage() et getNextImage() pour rendre les choses plus claires...

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Points : 40
    Points
    40
    Par défaut
    Ben écoute, je te remercie encore pour ces infos qui m'ont bien servies .

    Bonne fin de journée à tous les deux, et merci encore.
    Si tu tapes ta tête contre une cruche et que ça sonne creux, ce n'est pas forcément la cruche qui est vide !!
    Mes topics sont tabous, vous en viendrez tous à bout.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lancer une méthode de la page parente
    Par kastor_lapon dans le forum ASP.NET
    Réponses: 2
    Dernier message: 29/05/2007, 17h15
  2. Réponses: 5
    Dernier message: 21/06/2006, 14h02
  3. Choisir de lancer le bon serveur au démarrage linux
    Par temperature dans le forum Administration système
    Réponses: 5
    Dernier message: 20/05/2006, 16h49
  4. Lancer une méthode d'une classe Owner
    Par akabane dans le forum Delphi
    Réponses: 4
    Dernier message: 19/05/2006, 00h17
  5. Réponses: 11
    Dernier message: 02/02/2006, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo