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 :

[débutant] [JTree] Comprendre une sélection


Sujet :

Composants Java

  1. #1
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Par défaut [débutant] [JTree] Comprendre une sélection
    Hello...

    Je me lance dans la compréhension des JTree, car j'en ai besoin dans le cadre de mon projet de développement...
    C'est la première fois que j'utilise ce composant, et il me semble encore un peu obscur... (J'ai passé avec brio le cap de la compréhension des JTables, avec leur CellRenderer et leur TableAbstractModel, mais les JTree m'ont l'air bien plus ardu à comprendre...)

    Voici un petit code qui m'intéresse que j'ai trouvé sur le net qui montre une sélection simple sur un JTree, mais je ne comprends pas une chose : pourquoi, lorsqu'on sélectionne un élément "GrandChild", et qu'on ferme graphiquement le folder contenant cet élément : j'ai une levée d'erreur ???

    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
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    import javax.swing.event.*;
     
    public class SelectableTree extends JFrame implements TreeSelectionListener
    {
    private JTree tree;
    private JTextField currentSelectionField;
     
    //************************************************************************
    public static void main(String[] args)
      {
      try {
          UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
          }
      catch (Exception e)
          {
          System.out.println(e.toString());
          }
      new SelectableTree();
      }
    //************************************************************************
    public SelectableTree()
    {
      super("JTree Selections");
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      Container content = getContentPane();
     
      DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
      DefaultMutableTreeNode child;
      DefaultMutableTreeNode grandChild;
      for(int childIndex=1; childIndex<4; childIndex++)
          {
          child = new DefaultMutableTreeNode("Child " + childIndex);
          root.add(child);
          for(int grandChildIndex=1; grandChildIndex<4; grandChildIndex++)
              {
              grandChild = new DefaultMutableTreeNode("Grandchild " + childIndex +
                                                      "." + grandChildIndex);
              child.add(grandChild);
              }
          }
      tree = new JTree(root);
      tree.addTreeSelectionListener(this);
     
      content.add(new JScrollPane(tree), BorderLayout.CENTER);
      currentSelectionField = new JTextField("Current Selection: NONE");
      content.add(currentSelectionField, BorderLayout.SOUTH);
      setSize(250, 275);
      setVisible(true);
      }
    //************************************************************************
    public void valueChanged(TreeSelectionEvent event)
      {
      currentSelectionField.setText("Current Selection: " +
                                    tree.getLastSelectedPathComponent().toString());
      }
    //************************************************************************
    }
    Les erreurs sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    java.lang.NullPointerException
    at SelectableTree.valueChanged(SelectableTree.java:56)
    at javax.swing.JTree.fireValueChanged(JTree.java:2392)
    at javax.swing.JTree$TreeSelectionRedirector.valueChanged(JTree.java:2763)
    Merci d'avance pour votre aide...

  2. #2
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Par défaut
    Il n'y a plus de problème quand on remplace la dernière méthode par ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //************************************************************************
    public void valueChanged(TreeSelectionEvent event)
      {
    	if( tree.getLastSelectedPathComponent()!=null)
      currentSelectionField.setText("Current Selection: " +
                                    tree.getLastSelectedPathComponent().toString());
      }
    //************************************************************************
    Bizarre, bizarre... Je pige pas encore tout, mais là, cela ne me fait plus de levée de NullPointerException...

    Bon...

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par calogerogigante
    Bizarre, bizarre... Je pige pas encore tout, mais là, cela ne me fait plus de levée de NullPointerException...
    Si tree.getLastSelectedPathComponent() est null alors c'est normal que tree.getLastSelectedPathComponent().toString() provoque un NullPointerException...

    valueChanged() doit intercepter des evenements où aucun path n'est sélectionné, d'où le null...

    a++

  4. #4
    Membre éclairé Avatar de calogerogigante
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Par défaut
    C'est pour ça que j'ai corrigé comme je l'ai fait... ;-)

    Mais j'ai une question : valueChanged est donc une méthode qui est en fait appelée à chaque fois qu'on agit sur le JTree : que cela mène à une sélection ou non, valueChanged est d'office appelé ?

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Je crois que j'ai parlé un peu trop vite...
    Je viens de lire la doc de TreeSelectionListener et il y est indiqué que la méthode est appellé lorsque la selection change...

    Le problème doit survenir lors de ta première sélection car il ne doit pas exister de selection précédente...

    a++

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/10/2014, 15h11
  2. Réponses: 2
    Dernier message: 19/12/2013, 16h04
  3. Réponses: 4
    Dernier message: 18/11/2006, 22h58
  4. [Débutant] Connexion sur une machine distante protégée
    Par arthix dans le forum Développement
    Réponses: 3
    Dernier message: 28/08/2003, 09h46
  5. [débutant][xsl]incrémenter une variable
    Par guitalca dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 01/04/2003, 15h19

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