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 :

Desinner un cercle


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut Desinner un cercle
    Bonjour,
    je débute en Java.
    Je sais créer une fenêtre mais maintenant, je cherche à y dessiner un cercle.
    Voilà ce que j'ai fais :
    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
     
    import java.awt.*;
    class BalleRebondissante{
    	public void paint(Graphics g){
    		//Dessin du cercle
    		Color cFond = new Color(232,232,232);
    		g.setColor(cFond);
        		g.fillOval(2,2,118,118);
        		g.setColor(Color.black);
        		g.drawOval(2,2,118,118);
    	}
    	public static void main(String argv[]){
    		//Création de la fenêtre
    		Frame f = new Frame("Balle rebondissante");
    		f.setSize(640,480);
     
    		//Affichage de la fenêtre
    		f.setVisible(true);
    	}
    }
    Ca m'affiche seulement la fenête et je ne vois pas le cercle.
    Qu'es-ce qu'il me manque dans le code?
    Merci.

  2. #2
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Salut,

    En fait, ton paint(Graphics g) est défini dans la classe BalleRebondissante. Or dans celle ci, tu fais un repaint sur une Frame, avec un paint(Graphics g) différent.
    Une solution pourrait être d'étendre Frame (ou plutôt JFrame) à ta classe BalleRebondissante

    Cordialement

    Fred

  3. #3
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut
    Citation Envoyé par mavina
    Salut,

    En fait, ton draw(Graphics g) est défini dans la classe BalleRebondissante. Or dans celle ci, tu fais un repaint sur une Frame, avec un draw(Graphics g) différent.
    Une solution pourrait être d'étendre Frame (ou plutôt JFrame) à ta classe BalleRebondissante

    Cordialement

    Fred
    Je n'utilise pas de méthode draw(Graphic g) dans mon programme. Tu veux surement parler de ma méthode paint(Graphicg)?
    Pourquoi veux-tu que j'utilise JFrame?

  4. #4
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Il vaut mieux dessiner dans un JPanel que tu inséreras dans ta JFrame par après.
    Ce qui donne un truc dans le genre :
    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
     
    import java.awt.Color;
    import java.awt.Graphics;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    /**
     *
     * @author Anis Frikha
     */
    class PanelDessin extends JPanel{
     
        @Override
        protected void paintComponent(Graphics g){
            super.paintComponent(g);
            //Dessin du cercle
            Color cFond = new Color(232,232,232);
            g.setColor(cFond);
            g.fillOval(2,2,118,118);
            g.setColor(Color.black);
            g.drawOval(2,2,118,118);
     
        }
    }
     
    public class Dessin {
        public static void main(String[] args) {
                    //Création de la fenêtre
    		JFrame f = new JFrame("Balle rebondissante");
    		PanelDessin pdes=new PanelDessin();
                    f.setSize(640,480);
                    //ajout du panel
                    f.add(pdes);
    		//Affichage de la fenêtre
    		f.setVisible(true);
        }
     
     
     
    }
    Quelques remarques sur ton code :
    • redéfinie la méthode paintComponent plutôt que paint
    • Utilise Swing avec Jframe au lieu de awt avec Frame
    • Tu dois hériter d'un composant pour redéfinir une de ses méthodes


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  5. #5
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut
    Citation Envoyé par afrikha
    Il vaut mieux dessiner dans un JPanel que tu inséreras dans ta JFrame par après.
    Ce qui donne un truc dans le genre :
    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
     
    import java.awt.Color;
    import java.awt.Graphics;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    /**
     *
     * @author Anis Frikha
     */
    class PanelDessin extends JPanel{
     
        @Override
        protected void paintComponent(Graphics g){
            super.paintComponent(g);
            //Dessin du cercle
            Color cFond = new Color(232,232,232);
            g.setColor(cFond);
            g.fillOval(2,2,118,118);
            g.setColor(Color.black);
            g.drawOval(2,2,118,118);
     
        }
    }
     
    public class Dessin {
        public static void main(String[] args) {
                    //Création de la fenêtre
    		JFrame f = new JFrame("Balle rebondissante");
    		PanelDessin pdes=new PanelDessin();
                    f.setSize(640,480);
                    //ajout du panel
                    f.add(pdes);
    		//Affichage de la fenêtre
    		f.setVisible(true);
        }
     
     
     
    }
    Quelques remarques sur ton code :
    • redéfinie la méthode paintComponent plutôt que paint
    • Utilise Swing avec Jframe au lieu de awt avec Frame
    • Tu dois hériter d'un composant pour redéfinir une de ses méthodes
    Oui effectivement ton code fonctionne.
    J'affiche le cercle. Maintenant j'aimerai bien comprendre pourquoi...

  6. #6
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Par défaut
    Bonjour,

    c'est normal, mettre simplement la méthode paint marche pour les applet (en fait pour les "Canvas"), pas les applications.

    tu peux essayer avec un 2ème classe qui gère le dessin. essaye ça:

    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
     
     
    import java.awt.*;
     
    public class taClasse extends Frame{
     
    feuilleDessin FD=new feuilleDessin();
     
      public taClasse(){
        add(FD);
      }
     
      public static void main(String[]args){
        taClasse TC=new taClasse();
        TC.setVisible(true);
      }
     
    }
     
    class feuilleDessin extends Canvas{
     
    public void paint(Graphics g){		
      Color cFond = new Color(232,232,232);
      g.setColor(cFond);
      g.fillOval(2,2,118,118);
      g.setColor(Color.black);
      g.drawOval(2,2,118,118);
      }
     
    }

  7. #7
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut
    Citation Envoyé par Michaeljackfan
    Bonjour,

    c'est normal, mettre simplement la méthode paint marche pour les applet (en fait pour les "Canvas"), pas les applications.

    tu peux essayer avec un 2ème classe qui gère le dessin. essaye ça:

    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
     
     
    import java.awt.*;
     
    public class taClasse extends Frame{
     
    feuilleDessin FD=new feuilleDessin();
     
      public taClasse(){
        add(FD);
      }
     
      public static void main(String[]args){
        taClasse TC=new taClasse();
        TC.setVisible(true);
      }
     
    }
     
    class feuilleDessin extends Canvas{
     
    public void paint(Graphics g){		
      Color cFond = new Color(232,232,232);
      g.setColor(cFond);
      g.fillOval(2,2,118,118);
      g.setColor(Color.black);
      g.drawOval(2,2,118,118);
      }
     
    }
    Dans ton code feuilleDessin n'existe pas.
    Donc erreur à la compilation.

  8. #8
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Par défaut
    Citation Envoyé par YuGiOhJCJ
    Dans ton code feuilleDessin n'existe pas.
    Donc erreur à la compilation.

    Ben je l'ai essayé et il fonctionne...
    "feuilleDessin" est la class que je défini juste en dessous.


    Il t'a conseillé JFrame, parce que c'est en quelques sortes une nouvelle version de la class Frame en un peu mieux.

    Le code fonctionne parce que pour pouvoir dessiner, il te faut quelque-chose pour dessiner dessus. Dans ton code de départ, tu essayais de dessiner dans la Frame, mais tu ne peux pas, il faut dessiner dans un Canvas ou un Panel ou autre chose qui accèpte que l'on dessine dessus, puis ajouter ce "quelque chose" dans ta Frame.
    Donc dans ce cas, tu ne dessine plus sur ta Frame, elle se contente d'afficher un Component sur lequel tu peux dessiner.
    C'est un peu comme si tu veux dessiner sur une vitre avec des crayons couleur, tu ne peux pas. Mais si tu colles une feuille dessus, tu pourras dessiner sur la feuille.

  9. #9
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut
    Citation Envoyé par Michaeljackfan
    Ben je l'ai essayé et il fonctionne...
    "feuilleDessin" est la class que je défini juste en dessous.


    Il t'a conseillé JFrame, parce que c'est en quelques sortes une nouvelle version de la class Frame en un peu mieux.

    Le code fonctionne parce que pour pouvoir dessiner, il te faut quelque-chose pour dessiner dessus. Dans ton code de départ, tu essayais de dessiner dans la Frame, mais tu ne peux pas, il faut dessiner dans un Canvas ou un Panel ou autre chose qui accèpte que l'on dessine dessus, puis ajouter ce "quelque chose" dans ta Frame.
    Donc dans ce cas, tu ne dessine plus sur ta Frame, elle se contente d'afficher un Component sur lequel tu peux dessiner.
    C'est un peu comme si tu veux dessiner sur une vitre avec des crayons couleur, tu ne peux pas. Mais si tu colles une feuille dessus, tu pourras dessiner sur la feuille.
    Oui tu as raison j'ai du faire un mauvais copier/coller :-)

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

Discussions similaires

  1. Dessiner un cercle
    Par delire8 dans le forum DirectX
    Réponses: 7
    Dernier message: 26/07/2003, 12h11
  2. Lignes, cercles
    Par Francky033 dans le forum DirectX
    Réponses: 1
    Dernier message: 13/07/2003, 22h18
  3. [VB6] [Graphisme] Tracer un cercle avec pset
    Par bleuerouge dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/12/2002, 17h12
  4. [VB6] [Graphisme] Arc de cercle dans un picturebox
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 04/11/2002, 17h55
  5. savoir si 1 point est a l'intérieur d'un cercle ...
    Par skarladevobsy dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/05/2002, 18h14

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