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 :

Pb de noeud qui ne s'ouvre pas.


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 25
    Par défaut Pb de noeud qui ne s'ouvre pas.
    Alors plaçons le contexte tout d'abord!

    J'ai une classe SearchTree héritant de Jtree.

    j'y attache un Listenner comme ceci :

    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
    this.addTreeWillExpandListener(new TreeWillExpandListener(){
     
    			@Override
    			public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException {
    			}
     
    			@Override
    			public void treeWillExpand(TreeExpansionEvent event)throws ExpandVetoException {
    				final SearchResults test = treeBuilder.getJacomoModel().getSearchResults().clone();
    				String node = event.getPath().getLastPathComponent().toString();
    				final ComponentDescriptor compSelect = treeBuilder.getJacomoModel().getSearchResults().getComponentDescriptor(node).clone();	
    				treeBuilder.getJacomoModel().checkChanges(treeBuilder.getJacomoModel().getComponentFinder().searchComponentElement(compSelect), test);
    				expandNode(event);
    			}			
    		});
    L'évènement est bien capturé, le traitement demandé à bien lieu....Mais le noeud ne s'ouvre pas ensuite...
    Lors d'un second clic le noeud s'ouvre....

    Peut-être que c'est dû au temps de traitement pris par la méthode CheckChanges étant donné que lors d'un deuxieme clic elle s'éxécute plus vite...

    Je suis un peu perdu! Help!

    Et n'hésitez pas à me demander plus de précisions!

    Merci

  2. #2
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Que fait l'appel à expandNode(event); ?

    Est-ce que la méthode interagit avec le JTree pour développer le nœud ? Si c'est le cas alors ça peut créer un comportement inattendu car si on arrive dans treeWillExpand le nœud est déjà sur le point de se développer et il le fera sauf si on lève une exception.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 25
    Par défaut
    Hey !

    Bon le problème vient visiblement d'un reload....ce qui force la fermeture de tout les noeuds de l'arbre

    Est-ce qu'il existe une solution pour empécher cela?

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Par défaut
    Bonjour,

    j'avoue que j'ai lu rapidement ton sujet et cherchant quelque chose de similaire je suis tombé sur le lien suivant :

    http://download.oracle.com/javase/tu...EventDemo.java

    Ils utilisent la class TreeExpansionListener redéfinissent les fonctions treeExpanded et treeCollapsed.

    D'après ce que je vois pour empêcher un nœud de se déployer il faut lancer une exception de type ExpandVetoException, pas besoin de lancer la fonction expand...

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Effectivement un reload() recharge l'arbre.

    Il faut utiliser les événements du modèle si tu veux mettre à jour ton arbre sans perdre les informations visuelles (état d'expansion des noeuds, sélections, etc.).

    Pour "charger" dynamiquement un arbre il faut faire un truc du genre :
    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
     
    final JTree jtree;
    //...
    jtree.addTreeWillExpandListener(new TreeWillExpandListener() {
      public void treeWillCollapse(TreeExpansionEvent event) {
      }
      public void treeWillExpand(TreeExpansionEvent event) {
        final TreePath path = event.getPath();
        if (!isLoaded(path)) {
          if (!isLoading(path)) {
            new Thread() {
              public void run() {
                load(path);
                SwingUtilities.invokeLater(new Runnable() {
                  public void run() {
                    jtree.expandPath(path);
                  }
                });
              }
            }.start();
            throw new ExpandVetoException(event);
          }
        }
      }
    });
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

Discussions similaires

  1. PDF qui ne s'ouvre pas sous IE
    Par keub51 dans le forum Langage
    Réponses: 1
    Dernier message: 26/04/2007, 11h56
  2. [WD11] Fenetre qui ne s'ouvre pas
    Par hegros dans le forum WinDev
    Réponses: 29
    Dernier message: 27/03/2007, 11h33
  3. Réponses: 4
    Dernier message: 12/10/2006, 12h43
  4. [BDS 2006] Fichier d'aide qui ne s'ouvre pas
    Par doudoustephane dans le forum C++Builder
    Réponses: 5
    Dernier message: 31/08/2006, 20h07
  5. Fenetre qui ne s'ouvre pas
    Par Anduriel dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 29/06/2006, 11h23

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