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

Graphisme Java Discussion :

Dessin dans JPanel issu de la palette


Sujet :

Graphisme Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Dessin dans JPanel issu de la palette
    Bonjour à toutes et à tous,

    Je poste ici car je pense que ce que j'ai fait sous NetBeans et son GUI doit pouvoir être obtenu avec un autre IDE comportant un GUI.

    J'ai lu, un peu partout, que pour dessiner dans un JPanel, il fallait créer un composant étendant JPanel et dans lequel on redéfinissait la méthode "paintComponent(Graphics g)". Si cette manière de faire est opérationnelle, elle fait perdre l'avantage du placement de type FreeLayout obtenu grâce au GUI (ou alors, je ne sais pas comment faire).

    J'ai trouvé une méthode de faire (qui existe sûrement mais que je n'ai pas réussi à trouver) qui permet de dessiner directement dans un JPanel issu de la palette.

    1. Dans la classe de la fenêtre principale, définir les paramètres qui permettront de modifier le dessin. Par exemple :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      private Rectangle r1, r2;
      private Color c1, c2;
      ...;
    2. Dans le constructeur de la fenêtre principale, placer l'instruction suivante :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      gMonPanel = monPanel.getGraphics();
    3. Surcharger la méthode "paint(Graphics g)" de la fenêtre principale de la manière suivante :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      @Override public void paint(Graphics g) {
          super.paint(g);
          gMonPanel.setColor(c1);
          gMonPanel.setCela ...;
          gMonPanel.drawRectangle(r1.getX(), ...);
          gMonPanel.drawBidule ...;
          gMonPanel.Tout_ce_qu'on_faire_avec_le_contexte_graphique;
      }
    4. Enfin, à chaque fois que vous voulez modifier votre dessin, appelez la méthode de la fenêtre principale.

    Voilà, j'ai trouvé cela simple et évitant d'avoir à étendre une nouvelle classe à chaque fois qu'on a un petit "zibouiboui" à dessiner.

    Vos remarques sont les bienvenues.

    Cordialement.

    Pierre.

  2. #2
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    J'ai toujours codé à la main mes interfaces graphiques java : qu'entends tu par freelayout ? le fait de pouvoir placer où tu veux ton composants et de le dimensionner comme tu veux ? Je ne vois pas en quoi le fait que tu utilise cette facon de creer des interfaces t'empeche de dessiner "normalement" dans un panel. Je trouve que recuperer comme cela le graphics du panel et le peindre dans la methode paint de ta fenetre n'est pas propre. Si tu as ajouté quelques par le panel à ta fenetre en faisant un getContentPane().add(monpanel) le paintComponent() du panel sera appelé, et c'est là que tu dois placer les instructions de dessin de ton panel.

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par leyee
    J'ai toujours codé à la main mes interfaces graphiques java : qu'entends tu par freelayout ? le fait de pouvoir placer où tu veux ton composants et de le dimensionner comme tu veux ?
    Le FreeLayout, contrairement à son nom, est un placement automatique des composants par le GUI de NetBeans qui t'oblige à respecter des intervalles imposés entre les composants.

    Citation Envoyé par leyee
    Je ne vois pas en quoi le fait que tu utilise cette facon de creer des interfaces t'empeche de dessiner "normalement" dans un panel. Je trouve que recuperer comme cela le graphics du panel et le peindre dans la methode paint de ta fenetre n'est pas propre.
    Je n'ai jamais dit que c'était propre, et c'est bien pour cela que vos remarques m'intéressent. Mon problème est que je n'ai pas trouvé le moyen d'accéder à la méthode "paintComponents" de mon JPanel ainsi créé par le GUI de NetBeans.

    Maintenant, si vous me dites comment y avoir accès, c'est sûr que c'est ce que je ferai ; ça sera bien plus simple.

    Citation Envoyé par leyee
    Si tu as ajouté quelques par le panel à ta fenetre en faisant un getContentPane().add(monpanel) le paintComponent() du panel sera appelé, et c'est là que tu dois placer les instructions de dessin de ton panel.
    Avec le GUI de NetBeans, les composants sont placés par glisser/déposer à partir d'un symbole de la palettes de composants vers la surface à l'écran représentant le container où tu veux le mettre (un JDialog, par exemple).

    Dès lors, tout une séquence d'instructions, représentant le placement et les propriétés de ton composant, est générée automatiquement et on n'y a pas accès.

    Tout ça pour dire que ce n'est pas moi qui place le composant en faisant un "getContentPane().add(monpanel)" et que de ce fait, je ne vois pas comment avoir accès à sa méthode "paintComponen()".

    Autrement dit : comment, de l'intérieur de la classe de ma fenêtre (JDialog par exemple), je peux aller surcharger la méthode "paintComponent" de mon composant JPanel ?

    Merci de votre aide.

    Cordialement.

    Pierre.

  4. #4
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    Tres bien, je ne connais pas l'outil que tu utilise, je pensais qu'apre sgeneration, tu avais quand meme acces au code genere un peu comme c'est le cas avec visual studio. Dans ce cas effectivement, mes propositions ne semblent pas adaptées je vais essayer de jeter un oeil sous netbean

Discussions similaires

  1. affichage de dessin dans jpanel avec BorderLayout
    Par ilias20 dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 26/03/2010, 12h55
  2. Dessin dans JPanel
    Par tyteflo dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 28/12/2008, 00h39
  3. [Debutant]Dessiner dans plusieurs JPanels. Probleme
    Par ahage4x4 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 22/05/2006, 12h32
  4. Dessiner dans différents JPanels
    Par N@sH dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/05/2005, 15h39
  5. Dessiner dans un JPanel
    Par Oliveuh dans le forum Composants
    Réponses: 5
    Dernier message: 19/07/2004, 12h13

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