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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 ?

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