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

Composants Java Discussion :

JCheckBox dans JTree


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 99
    Par défaut JCheckBox dans JTree
    Bonjour,

    j'ai ajouté 2 cases à cocher dans mon arbre, cependant je n'arrive pas à les cocher/décocher. Sauriez-vous m'expliquez pourquoi?

    Voici mon code :
    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
    91
    92
    93
    94
    95
    96
     
    public class CheckTreeCellRenderer extends JPanel implements TreeCellRenderer{ 
            private TreeCellRenderer delegate; 
            private JCheckBox checkBox1; 
            private JCheckBox checkBox2;
            private JLabel param, admin;
     
            public CheckTreeCellRenderer(TreeCellRenderer delegate) {
                this.delegate = delegate;
                this.setLayout(new BorderLayout()); 
                this.setOpaque(false);
     
                this.checkBox1 = new JCheckBox();
                this.checkBox2 = new JCheckBox();
    //            this.checkBox1.setOpaque(false);
    //            this.checkBox2.setOpaque(false);
                this.checkBox1.setFocusable(true);
                this.param=new JLabel("Param");
                this.admin=new JLabel("Admin");
            }
     
            public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus){ 
                Component renderer = delegate.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); 
     
                removeAll();
     
                TreePath path = tree.getPathForRow(row);
     
                if(path==null)
                    return renderer;
     
                if(row==0) {
                    add(renderer, BorderLayout.CENTER);
                    add(getPanel4FirstLine(), BorderLayout.EAST);                
                }
                else if(path.getPathCount()==2){
                    add(renderer, BorderLayout.CENTER);
                }
                else {
                    add(renderer, BorderLayout.CENTER);
                    add(getPanel(checkBox1, checkBox2), BorderLayout.EAST);
                }
     
                return this;
            }
     
            private JPanel getPanel(JCheckBox c1, JCheckBox c2) {
                JPanel p=new JPanel();
                GroupLayout layout = new GroupLayout(p);        
                layout.setHorizontalGroup(
                    layout.createSequentialGroup()
                        .addGap(ComponentDimension.GAP_4_HORIZONTAL_GROUP)
                        .addGroup(layout.createParallelGroup()
                            .addComponent(c1))
                        .addGap(ComponentDimension.GAP_4_HORIZONTAL_GROUP)
                        .addGroup(layout.createParallelGroup()
                            .addComponent(c2))
                        .addGap(ComponentDimension.GAP_4_HORIZONTAL_GROUP)
                );        
                layout.setVerticalGroup(
                    layout.createSequentialGroup()
                        .addGap(ComponentDimension.GAP_4_VERTICAL_GROUP/2)
                        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                            .addComponent(c1)
                            .addComponent(c2))
                );        
                p.setLayout(layout);
     
                return p;
            }
     
            private JPanel getPanel4FirstLine() {
                JPanel p=new JPanel();
                GroupLayout layout = new GroupLayout(p);        
                layout.setHorizontalGroup(
                    layout.createSequentialGroup()
                        .addGap(ComponentDimension.GAP_4_HORIZONTAL_GROUP)
                        .addGroup(layout.createParallelGroup()
                            .addComponent(this.param))
                        .addGap(ComponentDimension.GAP_4_HORIZONTAL_GROUP)
                        .addGroup(layout.createParallelGroup()
                            .addComponent(this.admin))
                        .addGap(ComponentDimension.GAP_4_HORIZONTAL_GROUP)
                );        
                layout.setVerticalGroup(
                    layout.createSequentialGroup()
                        .addGap(ComponentDimension.GAP_4_VERTICAL_GROUP+2)
                        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                            .addComponent(this.param)
                            .addComponent(this.admin))
                );        
                p.setLayout(layout);
     
                return p;
            }
        }
    Merci

  2. #2
    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
    Appels la méthode setEditable(true) sur ton JTree pour commencer,

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 99
    Par défaut
    Salut,

    j'avais déjà testé cette solution, mais cela ne résoud pas mon problème. L'arbre est bien éditable (on peut modifier le texte des noeuds), mais toujours pas les checkbox. De plus je ne souhaite pas que mon arbre puisse être éditable.

    Merci

  4. #4
    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
    Arf j'oubliais, il te faut également un editor en plus du renderer, ce dernier s'occupant exclusivement du rendu.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 99
    Par défaut
    Comment utilise-t-on l'editor dans ce cas? Je m'en suis déjà servi pour des tableaux, mais là je n'arrive pas à l'utiliser :
    Où placer la méthode setCellEditor(new DefaultCellEditor(new JCheckBox()));

    Je l'ai fait sur l'arbre, mais on dirait que lorsque je clique sur le nom du noeud qu'une checkbox apparait derrière, alors que mes checkbox sont situées tout à droite. De plus rien ne se passe lorsqu'on clique dessus...

    Aurais-tu un exemple?

  6. #6
    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

Discussions similaires

  1. Probleme avec JCheckBox dans le menu contextuel
    Par Mo_Poly dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 20/03/2007, 21h29
  2. jcheckbox dans une jtable
    Par orelero dans le forum Composants
    Réponses: 6
    Dernier message: 20/05/2006, 01h31
  3. Comment afficher les icones de programme (word..) dans JTree
    Par david06600 dans le forum Composants
    Réponses: 2
    Dernier message: 07/03/2006, 17h50
  4. pb avec un JcheckBox dans un Jtable
    Par hutchuck dans le forum Composants
    Réponses: 4
    Dernier message: 04/11/2005, 09h51
  5. JCheckBox dans un TitledBorder ?
    Par magiline dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 02/12/2004, 16h20

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