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

AWT/Swing Java Discussion :

Probleme avec repaint()


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut Probleme avec repaint()
    Bonsoir,

    J'aimerai savoir pourquoi est ce que la fonction repaint ne marche pas !
    Le premier rectangle s'affiche mais pas les suivants.
    LE principe est de simuler une barre de progression.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class Toto extends JFrame implements ActionListener
    {
     Timer t;
      static int i;  
     Toto()
     {
      setTitle("Ma fenetre");
      Container c=(Container) getContentPane();
      setBound(10,10,900,900);
     
      JPane panel= new JPanel;
      c.add(panel);
      setVisible(true);
     }
     
      public void init()
      {
         i=0;
      }
     
      public void start()
      {
        t=new Timer(500,this);
        t.start();
      }
     
      public void actionPerformed(ActionEvent e)
      {
        repaint();
      }
     
      public void paint(Graphics g)
      {
        g.setColor(Color.blue);
        g.fillRect(10,250,10+i,80);
        i=i+10;
        requestFocus();
      }
    }
    Merci.

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 109
    Par défaut
    le actionlistener est mi sur rien. donc il n'y a pas d'appelle a repaint();

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 68
    Par défaut
    Juste une question :
    qu'est ce qui appelle la fonction actionPerformed() ?
    Car au vu de ton code, cette fonction ne sera jamais appelée, et a fortiori le repaint() non plus...

    Deuxième question :
    Pourquoi ne pas utiliser une JProgressBar ? ça fonctionne très bien ...

  4. #4
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Merci pour ta réponse,

    j'implemente l'interface ActionListener mais je n'utilise pas d'ecouteur (souris ou clavier).
    Je veux que le repaint() s'effectue sans condition.
    Mon appel du repaint est effectué dans ActionPerformed.

    Remarque: j'ai mis mon code dans une applet, et il marche à merveille.

  5. #5
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Juste une question :
    qu'est ce qui appelle la fonction actionPerformed() ?
    Car au vu de ton code, cette fonction ne sera jamais appelée, et a fortiori le repaint() non plus...
    j'ai toujours utilisé actionPerformed de cette façon, et cela a toujours marché.

    Citation Envoyé par Akhan Voir le message
    Deuxième question :
    Pourquoi ne pas utiliser une JProgressBar ? ça fonctionne très bien ...
    Je n'utilise pas de JProgressBar car mon but final n'est pas d'avoir une barre de progression, mais je veux simuler une représentation graphique de la memoire en fonction du temps.

  6. #6
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Bonjour
    J'ajoute à ce qui a été deja dite que ta methode "start()" n'est jamais appelé
    voila ton code transformé qui marche chez moi. en plaçant ta methode start() dans le constructeur Toto()
    (desolé j'ai reindenté ton code,je suis plutot accolade devant par rapport a toi a la ligne )
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    class Toto extends JFrame implements ActionListener{
     Timer t;
      static int i;  
     Toto() {
      setTitle("Ma fenetre");
      Container c=(Container) getContentPane();
      setBounds(10,10,900,900);
     
      JPanel panel= new JPanel();
      c.add(panel);
      setVisible(true);
      start();
     }
     
      public void init()  {
         i=0;
      }
     
      public void start()  {
        t=new Timer(500,this);
        t.start();
      }
     
      public void actionPerformed(ActionEvent e)  {
        repaint();
      }
     
      public void paint(Graphics g)  {
        g.setColor(Color.blue);
        g.fillRect(10,250,10+i,80);
        i=i+10;
        requestFocus();
      }
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 68
    Par défaut
    Ok, je disais ça parce que le code que tu as écrit simule le fonctionnement d'une progressBar, donc tu serais sûrement moins embêté, et tu n'aurais pas de code à réécrire.

  8. #8
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Citation Envoyé par Akhan Voir le message
    Ok, je disais ça parce que le code que tu as écrit simule le fonctionnement d'une progressBar, donc tu serais sûrement moins embêté, et tu n'aurais pas de code à réécrire.

    Lol oui je sais.
    Mais j'ai préféré commencer doucement en simulant une barre qui avance de gauche à droite

  9. #9
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Citation Envoyé par krachik Voir le message
    Bonjour
    J'ajoute à ce qui a été deja dite que ta methode "start()" n'est jamais appelé
    voila ton code transformé qui marche chez moi. en plaçant ta methode start() dans le constructeur Toto()
    (desolé j'ai reindenté ton code,je suis plutôt accolade devant par rapport a toi a la ligne )
    Merci beaucoup pour ta reponse ça marche nickel !!!!


  10. #10
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Citation Envoyé par juve1897
    Merci beaucoup pour ta reponse ça marche nickel !!!!

    C'est bien que ça marche mais dans le code c'est censé ne pas s'arreter ...

  11. #11
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Oui effectivement, mais je pense qu'il doit y avoir une méthode stop().
    Ou est ce que je devrais l'appelé cette méthode lorsque j'en aurais besoin.
    Merci.

  12. #12
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Tu peux par exemple dans ce cas fixer une limite a "i" dans ton cas et arreter le timer ("t.stop()") quand la limite sera atteinte
    @+

  13. #13
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    J'ai une condition d'arrêt déjà défini mais ma boucle se trouvant dans la méthode paint() :
    est ce ici que je devrais faire "t.stop()" lorsque ma condition d'arrêt sera atteinte ?

  14. #14
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Oui
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      if (i==limite)
            t.stop()
    @+

  15. #15
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Merci, mais désolé d'insister mais tu es sur que ça marchera si je mets tous ça dans paint() ?

  16. #16
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 109
    Par défaut
    apres un coup de nettoyage :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    class Toto extends JFrame {
     
        public static void main(String[] args){
            new Toto();
        }
     
        public Toto() {        
            setContentPane(new Progress());
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setBounds(50,50,900,200);
            setVisible(true);
        }
     
     
     
        private class Progress extends JComponent {
     
            int i = 0;
     
            Progress() {
                new Timer(50, new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        repaint();
                    }
                }).start();
            }
     
     
            @Override
            public void paintComponent(Graphics g) {
                g.setColor(Color.blue);
                g.fillRect(10, 10, 10 + i, getHeight()-20);
                i = ( i>=getWidth()-30 )? 0 : i + 10;            
            }
        }
    }
    personnellement j'aurais utilisé un thread pour forcer a redessiner mais le resultat est le meme.

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

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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