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 :

JToggleButton + JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Par défaut JToggleButton + JPanel
    Bonjour à tous,

    Je fais actuellement un éditeur grafcet, et pour représenter mes différentes étapes et transitions j’utilise des JToggleButton associés à des images.

    Ces JToggleButton sont placés sur un JPanel que j’ai redéfini pour pouvoir dessiner une grille.

    Le problème est que je n’arrive pas à dessiner et par la même occasion redessiner de nouveau JToggleButton sur mon JPanel.

    Je voudrais savoir si vous avez des solutions ?

    Merci d’avance pour vos réponses.
    Sébastien

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    Ces JToggleButton sont placés sur un JPanel que j’ai redéfini pour pouvoir dessiner une grille.
    reféfini dans le sens : tu as mi un gridlayout? ou tu dessines une grille (en dessin) au fond?

    Le problème est que je n’arrive pas à dessiner et par la même occasion redessiner de nouveau JToggleButton sur mon JPanel.
    pour mettre un jour un jpanel utilise repaint et revalidate .

  3. #3
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Par défaut
    Bonsoir eclesia,

    reféfini dans le sens : tu as mi un gridlayout? ou tu dessines une grille (en dessin) au fond?
    Je n'ai pas utilisé un gridLayout mais dessiner une grille de cette façon.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    /*
     * PanelGrille.java
     *
     * Created on 19 juillet 2007, 21:11
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package automate;
    import javax.swing.*;
    import java.awt.Graphics;
    import java.awt.*;
    import java.util.ArrayList;
    /**
     *
     * @author Sébastien
     */
    public class PanelGrille extends JPanel {
        private int vh = 625;
        private int vw = 875;
        private Graphics2D g2;
        private ArrayList listeLabelEtape;
        private JToggleButton jtb;
        private PanelGrille panelGrille;
        /** Creates a new instance of PanelGrille */
        public PanelGrille() {
            listeLabelEtape = new ArrayList();
        }
     
        public void paintComponent(Graphics g){
            g2=null;
            int h = vh;
            int w = vw;
            g.setColor(Color.white);
     
            g.fillRect(0,0,w,h);
            g.setColor(Color.BLACK);
     
            g2=(Graphics2D)g;
     
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
            g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED);
     
            //Drawing the grid
     
            g2.setBackground(Color.white);
            g2.setColor(Color.BLUE);
            for(int i=0;i*25<=w;i++){
                if(i%5==0){
                    g2.setStroke(new BasicStroke(2));
                }else{
                    g2.setStroke(new BasicStroke(1));
                }
                g2.drawLine(25*i,0,25*i,h);
            }
            for(int i=0;i*25<=h;i++){
                if(i%5==0){
                    g2.setStroke(new BasicStroke(2));
                }else{
                    g2.setStroke(new BasicStroke(1));
                }
                g2.drawLine(0,25*i,w,25*i);
            }
            //Place et redessine les JToggleButton si il y en a.
            if(listeLabelEtape.size() > 0){
                System.out.println("Je dessine");
                jtb = (JToggleButton)listeLabelEtape.get(0);
    //            panelGrille.add(jtb, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 40, 40));
                jtb.setBounds(40, 40, 40, 40);
            }
        }
     
    //    public void dessinerLigne(int x1, int y1, int x2, int y2){
    //        g2.setColor(Color.BLUE);
    //        g2.drawLine(x1, y1, x2, y2);
    //        repaint();
    //    }
        // Mise à jour de la liste des JToggleButton et redessine le JPanel
        public void Rafraichir(ArrayList listeLabelEtape){
            this.listeLabelEtape = listeLabelEtape;
            repaint();
        }
     
        public void PointeurPanelGrille(PanelGrille p_PanelGrille){
            panelGrille = p_PanelGrille;
        }
    }

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    ok donc elle est déssinée.

    ajoute a la fin de la methode paintComponent() la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g.paintChildren();
    comme ca ca dessinera les composants contenus dans le JPanel.

  5. #5
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Par défaut
    Ca n'a pas fonctionné eclesia.

    Mais c'est peut être mon code qui est mauvais.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //Place et redessine les JToggleButton si il y en a.
            if(listeLabelEtape.size() > 0){
                System.out.println("Je dessine");
                jtb = (JToggleButton)listeLabelEtape.get(0);//0 pour les tests sinon placé dans une boucle for
    //            panelGrille.add(jtb, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 40, 40));
                jtb.setBounds(40, 40, 40, 40);
            }

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    c'est vrai retire le // sinon tu n'auras aucun bouton sur le jpanel.

    mais tu réajoutes le composant a chaque fois que tu dessines, il ne devrait être ajouté qu'une seule fois. (donc en dehors du paintComponent)

    garde toujours la ligne :
    g.paintChildren();

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par eclesia
    ok donc elle est déssinée.

    ajoute a la fin de la methode paintComponent() la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g.paintChildren();
    comme ca ca dessinera les composants contenus dans le JPanel.
    J'aurais plutôt tendance à dire, commencer par un appel à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    super.paintComponent(g);
    dans le paintCompoent. le paintChildren étant normalement appelé dans la méthode paint, en parallèle de paintComponent...
    ...

  8. #8
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Par défaut
    Bonjour sinok,

    j'avais corrigé par this.paintChildren(g2), je pense que ça fait la même chose.

    Je vais aussi regarder si il n'existe pas d'autre solutions pour dessiner ces images avec autre chose que des JToggleButton tout en gardant mes listener.

    On peut ajouter des listeners sur des Images ou des BufferedImage ?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par mango54
    Bonjour sinok,
    j'avais corrigé par this.paintChildren(g2), je pense que ça fait la même chose.
    pas vraiment, l'appel est paintChildren n'est pas du ressort de la méthode paintComponent mais de la méthode paint.

    Faire comme tu fais revient à faire deux appels à la méthode paintChildren, ce qui peu prendre un paquet de temps tout de même.

    alors que super.paintComponent ne réalise que les opérations de dessin prévues normalement pour le composant que tu modifies.

    Citation Envoyé par mango54
    On peut ajouter des listeners sur des Images ou des BufferedImage ?
    Non. Ce ne sont pas des composants Swing.

    Par contre tu peux ajouter des listener sur les composants dans lesquel se situent des images.

  10. #10
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Par défaut
    Par contre tu peux ajouter des listener sur les composants dans lesquel se situent des images.
    Oui, mais si j'ajoute des listeners à mon JPanel qui contient les images je ne pourrais pas les déplacer individuellement, ni les faire réagir aux cliques de la souris ?

    Je vais trouver une autre solution !

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    MouseListener et MouseMotionListener sur ton JPanel. (ensuite il faut être sur que le clic tombe sur telle ou telle image.

    ++

  12. #12
    Membre averti
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Par défaut
    MouseListener et MouseMotionListener sur ton JPanel. (ensuite il faut être sur que le clic tombe sur telle ou telle image.
    Ok merci je vais réflechir à cette solution sur le papier (j'ai déjà quelque idées) et je posterais mes idées après le boulot pour voir si je ne suis pas dans les choux.

Discussions similaires

  1. Afficher 2 fois le meme JPanel
    Par cmoulin dans le forum Composants
    Réponses: 3
    Dernier message: 11/05/2004, 09h33
  2. marges de JPanel
    Par cmoulin dans le forum Agents de placement/Fenêtres
    Réponses: 10
    Dernier message: 10/05/2004, 15h21
  3. Pb scintillement-stabilité lors réaffichage de JPanel
    Par Pill_S dans le forum Composants
    Réponses: 5
    Dernier message: 28/04/2004, 14h03
  4. Listener sur un JPanel
    Par ptitelfe dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/03/2004, 13h14
  5. JPanel et Border
    Par titoine dans le forum Débuter
    Réponses: 3
    Dernier message: 22/04/2003, 15h58

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