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 :

utilisation de paintComponent


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut utilisation de paintComponent
    Bonjour,

    j'écris un programme nécessitant l'affichage d'un labyrinthe.
    J'ai donc créer une classe JLabyrinthe héritant de JPanel, le tout utilisée dans une JFrame.

    Mon labyrinthe peut se modifier (création/suppression de murs), ce qui est géré par un pattern Observer/Observable.

    Pour que JLabyrinthe reste à jour et affiche tout correctement, le plus simple serait de redefinir sa méthode paintComponent et de l'appeler à chaque changement. Ainsi le labyrinthe serait automatique redessiné lors des changements d'état de ma fenêtre (resize,...) ou lorsque que mon labyrinthe change.

    Ma question : comment faire cela ? En effet, il faudrait que ma classe JLabyrinthe ait connaissance du labyrinthe pour pouvoir le dessiner (du style if(mur) { g.drawLine(...,...,...,...); }, avec g le Graphics de mon JPanel).
    Suis-je obligé de créer une variable Labyrinthe dans JLabyrinthe qui stockerait mes murs et qui serait mise à jour à chaque changement ?

    Merci d'avance

  2. #2
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Il vaut mieux effectivement créer un bean contenant les propriétés de ton labyrinthe, ton composant d'affichage se contentant de le dessiner tout bêtement et d'intéragir avec via un Controller.
    Renseigne toi sur le modèle MVC.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Merci.

    J'utilise déjà le pattern MVC dans mon application. Je vais tester ta solution et je mettrais ce sujet en [résolu] si j'arrive à l'implanter correctement.

    Toutoufois, une remarque : si j'utilise cette méthode, il y aura redondance de données, mon labyrinthe sera présent deux fois en mémoire. On ne peut pas éviter cela ?

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par Lidden Voir le message
    Merci.

    J'utilise déjà le pattern MVC dans mon application. Je vais tester ta solution et je mettrais ce sujet en [résolu] si j'arrive à l'implanter correctement.

    Toutoufois, une remarque : si j'utilise cette méthode, il y aura redondance de données, mon labyrinthe sera présent deux fois en mémoire. On ne peut pas éviter cela ?
    Pourquoi ton labyrinthe serait 2 fois en mémoire ?
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Explications supplémentaires :

    Pour le moment, j'ai une classe Simulation qui contient Labyrinthe (extends Observable) et une autre, MaFenetre qui a, entre autres, mon JLabyrinthe (implements Observer).

    En gros, concernant l'affichage et le "repaint" de mon JLabyrinthe, il y a deux cas :
    - soit le labyrinthe est modifié dans mon modèle (ajout/suppression de murs), et la, c'est la méthode "update" de JLabyrinthe (Observer) qui s'en occupe. Je peux alors récupérer mon labyrinthe en passant par l'objet Observable donné par update (Observable arg0, Object arg1) ;
    - soit il faut rafraichir l'affichage à cause d'un évènement généré par la fenêtre (redimensionnement,...) et la, je ne sais pas comment récupérer mon labyrinthe... (C'est pour le moment géré par un Listener).

    C'est la première application graphique que je réalise, et j'essaye de le faire d'une bonne manière en utilisant le pattern MVC. Si le Modèle et la Vue sont clairs pour moi, je patauge un peu pour le Contrôleur.
    J'ai lu différents tutoriels sur le sujet, dont ceux de ce site, mais ça reste confus. J'ai compris que c'était lui qui s'occupe des évènements créés par l'utilisateur dans l'interface graphique (clic sur des boutons par exemple) mais apparemment ce n'est pas sa seule raison d'être, car si j'ai compris ce que tu m'as dis, il pourrait aussi avoir accès aux variables de mon modèle.

    D'après ce que tu m'as répondu, il y a quelque chose de "simple" que je ne comprend pas.

    Pourrais-tu m'expliquer plus en détail ce que tu entends par "créer un bean contenant les propriétés de ton labyrinthe, ton composant d'affichage se contentant de le dessiner tout bêtement et d'intéragir avec via un Controller."

    Je vais continuer de lire de la doc la dessus pour comprendre exactement les capacités d'un Contrôleur et son implantation.

    Merci encore


    PS : c'est définitivement avec le Contrôleur que je suis coincé. D'après ce que je viens de re-re-relire, il a parmi ses variables d'instances le modèle en question. Donc en gros, j'oublie tout ce que je croyais savoir sur le contrôleur et je recommence avec plus de recul

  6. #6
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Il y a un bon bouquin pour ça :

    "Les cahiers du programmeurs Swing"

    Tu devrais peut-être te le procurer.

    Pour ma part j'ai développé un calendrier, j'ai un bean qui contient les tâches du calendrier, les tâches sélectionnées et plusieurs autres propriétés comme l'intervalle courant par exemple.
    Ma View se contente d'afficher selon les valeurs dans le bean et se redessine lorsqu'il y a un changement dans le bean.
    Le controleur écoute les évènements dans la view (MouseListener, KeyListener) afin de mettre à jour les propriétés du modèle (déplacement d'une tâche par exemple avec la souris).
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    D'accord, je vais essayer de me le procurer, j'espère qu'il sera à la médiathèque de mon école.

    Un petit "Résolu" pour conclure, même si j'ai encore pas mal de boulot devant moi.

    Encore merci

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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