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

2D Java Discussion :

débutant->prob avec Graphics


Sujet :

2D Java

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 94
    Points : 68
    Points
    68
    Par défaut débutant->prob avec Graphics
    Bonjour je suis un super débutant en java.

    Je voudrais dessiner un trait dans un jpanel, pour ce faire je souhaite utiliser la classe Graphics.
    J'ai bien chérché mais je n'y arrive pas.

    voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class JCanvas extends JPanel  {
            public JCanvas(){
     
                this.setBackground(Color.WHITE);
                Graphics g = getGraphics();
                g.drawLine(0, 0, 5, 5);
            }
     
        }
    Il me dit qu'il y a un problème de pointeur(sur la ligne drawline).

    Je ne veut pas faire qq'ch de compliqué, simplement faire une sorte de jpanel avec un trait dedans.

    d'avance merci de votre aide.

  2. #2
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class JCanvas extends JPanel  {
            public JCanvas() {
                this.setBackground(Color.WHITE);
            }
    
            public void paintComponent(Graphics g) {    
                super.paintComponent(g);
                g.drawLine(0, 0, 5, 5);
            }
     
        }


    EDIT : oubli de "public void" de ma part !!

  3. #3
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Ceci devrais mieux fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class JCanvas extends JPanel  {
     
            public JCanvas(){
     
                   setBackground(Color.WHITE);
            }
     
            public void paintComponent(Graphics g) {
     
                   super.paintComponent(g);
                   g.drawLine(0, 0, 50, 50);
            }
    }

  4. #4
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    lol... bon ok j'me suis fais eu...

  5. #5
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Developpez.com est le seul forum où les gens courent, se bousculent, se ruent, s'entre-déchirent, pour venir en aide aux débutants !!

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 94
    Points : 68
    Points
    68
    Par défaut petite question
    Tout d'abord merci pour vos réponses, en effet ca marche, en ce sens que ca fait précisement ce que je voulais...Mais je ne comprend pas pourquoi.

    La methode "public void paintComponent(Graphics g)", ce déclanche a quel moment et pourquoi?

    Et le graphics g, passé en paramètres, il sort d'ou celui là? Puisque je n'apelle pas cette methode, vous me direz que je n'ai pas besoin de savoir d'ou il sort, mais j'aimerais comprendre le mécanisme car vous imaginez bien qu'a terme, l'application va dessiner des choses plus complexes, et j'aimerai déclancher les evenement moi meme.

    Encore merci.

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    En fait cette méthode est appelée à chaque fois que l'application a besoin de redessiner le panel (redimensionnement, appel à la méthode repaint(), passage en premier plan) en fait il ne faut pas l'appeler directement, en général un repaint() suffit, si tu as bien fait la chose bien sûr
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  8. #8
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    Et le graphics g, passé en paramètres, il sort d'ou celui là?

    en fait, à chaque fois qu'un composant a besoin de se redessiner, il y a un appel à la méthode paint(Graphics g). g est le contexte graphique donnée par le système au composant pour qu'il se dessine. C'est le système qui se débrouille pour donner un contexte "valide". La méthode paintComponent est appellée en tout premier (c'est en général là qu'on met les images de fond par exemples), ensuite paint est appellée, et on peut dessiner dessus. Pour plus d'information sur les contextes graphiques, un seul moyen :
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  9. #9
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Heu non paint(Graphics) est appelée avant paintComponent(Graphics). Évitez en outre de déclarer paintComponent() publique puisque la méthode est normalement protégée. La bonne façon de la surcharger est donc d'écrire :

    protected void paintComponent(Graphics g) {
    ...
    }
    Romain Guy
    Android - Mon livre - Mon blog

  10. #10
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Pour faire un peu plus approfondi tout en restant bref, Java utilise un thread pour s'occuper automatiquement de tout ce qui est graphique.

    Les méthodes paint, paintComponent, actionPerformed, mouseMoved, mouseClicked, ... sont effectuées par le thread graphique à la suite d'évènements (clics de souris, fermetures/déplacement de fenêtres). C'est pour ça que tu n'as pas besoin de les appeler depuis le main.

    Un bon exemple est d'appeler wait() dans la méthode paint. Le thread graphique se bloque, et l'application ne répond plus. Mais rien n'a planté, c'est juste que tu as bloqué le thread graphique. Si le thread main écoute la console, par exemple, il continuera normalement.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  11. #11
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    -1 pour moi

    merci pour la correction gfx
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  12. #12
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 94
    Points : 68
    Points
    68
    Par défaut ok, donc...
    Mon probleme est le suivant:

    Je souhaite pouvoir ajouter des dessins de maniere dynamique c'est a dire, ajouter un trait puis il y aurait une action puis un autre trait, etc...

    Donc je pensait faire un objet JCanvas qui aurait des methodes du style:
    _dessiner trait 1()
    _dessiner trait 2()
    _etc...

    Donc comment faire si on ne peut pas separer les methodes paintComponent ?

  13. #13
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Il suffit que tu ais une sorte de modèle dans ton prog qui retien les lignes à dessiner (une arraylist dont chaque maillon contien les coordonnées de la ligne à dessiner) puis dans ton paintComponent tu redessine l'ensemble des lignes contenues dans cette ArrayList

    Pour le coté dynamique il te suffira d'ajouter/ retirer des formes de ton modèle et paintComponent s'occupe du reste
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

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

Discussions similaires

  1. [DéBUTANT]Prob avec RegQueryValue
    Par alainpeniche dans le forum C++
    Réponses: 3
    Dernier message: 01/08/2005, 23h57
  2. [débutant] Prob avec Tree ctrl
    Par Devether dans le forum MFC
    Réponses: 3
    Dernier message: 24/03/2004, 11h36
  3. Prob avec dates delphi
    Par ericmart dans le forum ASP
    Réponses: 6
    Dernier message: 20/10/2003, 17h51
  4. prob avec utilisation de package
    Par martijan dans le forum Modules
    Réponses: 13
    Dernier message: 11/07/2003, 09h37
  5. Thread probs avec WaitFor()
    Par pixelrock dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/11/2002, 09h40

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