begin process at 2012 02 15 01:29:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Java

 > 

Archives

 > 

Au secours

 > 

JTreeModel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

JTreeModel

mercredi 1 juin 2005 à 12:45:55 | JTreeModel

emilien81

Bonjour a tous,

J'ai un probleme avec un arbre de type JTree en Java. En fait j'ai des blancs qui apparaissent et lorsque je veux ajouter un noeud à l'arborescence, il faut que je rafraichisse tout l'arbre pour qu'il le prenne en compte.
Le soucis c'est que je ne sais pas par ou commencer par prendre mon probleme.

je crois que le plus simple c d'abord de vous montrer des bouts du code :

//entete de la classe + constructeur
public class ArbreModel implements TreeModel, Observer
{
   private Root root= null;
   private ArrayList listener = new ArrayList();
 
   public ArbreModel(Root _root)
  {
     this.root=_root;
  
     rootChanged();
     this.reseau.addObserver(this);
  }

________________________

//l'ajout d'un noeud
public void nodeAdded(TreeElement node)
{
  node.addObserver(this);
  TreePath path = node.getParent().makeTreePath();
  int childIndex[] = {node.getParent().getIndexOfChild(node)};
  Object nodes[] = {node};
  
  //averti de l'ajout d'un noeud
  TreeModelEvent event = new TreeModelEvent(this, path, childIndex, nodes);
  for (int i=this.listener.size()-1; i>=0; i--)
  {
   TreeModelListener l = (TreeModelListener) this.listener.get(i);
   l.treeNodesInserted(event);
  }
}

ce que j'ai remarqué c'est que si je retire le addObserver dans le constructeur
ou encore si je met TreePath path = node.makeTreePath(); à la place de TreePath path = node.getParent().makeTreePath(); dans l'ajout d'un noeud
alors les blancs disparaissent mais par contre si je veux ajouter un noeud ensuite il faut que je rafraichisse tout l'arbre pour voir apparaitre cet ajout.

je ne sais vraiment pas comment debuguer ca, si quelqu'un a une idée pour me sortir de la je suis preneur.
Merci

Emilien

mercredi 1 juin 2005 à 13:01:09 | Re : JTreeModel

mep

Deja pou eviter de reloader tout l'arbre tu peux te contenter de reloader le parent du noeud que tu ajoute. Si ton parent est le root ca revient au meme que de reloader tout l'arbre.
mercredi 1 juin 2005 à 13:04:57 | Re : JTreeModel

emilien81

en fait je le fais deja mais c'etait pour simplifier l'explication
mais le soucis de reloader c que ca referme tous les noeuds qui sont ouvert
mercredi 1 juin 2005 à 14:01:26 | Re : JTreeModel

mep

Ba essai de faire une fonction que sauvegarde le depliage/repliage de chaque noeud avant l'ajout et qui le reproduit apres.
mercredi 1 juin 2005 à 14:31:10 | Re : JTreeModel

emilien81

j'y avais pensé mais ca risque de ralentir le temps d'execution de l'apllication
et je sais que c possible de le faire sans.
ca serait dommange de faire comme ca, alors que Java est assez bien fait pour gérer ce type d'evenement.
mercredi 1 juin 2005 à 14:42:23 | Re : JTreeModel

mep

Pour optimiser tu peux partir du noeud parent pour sauver les etats. Sinon je ne vois pas d'autre solution ...
mercredi 1 juin 2005 à 15:17:00 | Re : JTreeModel

emilien81

merci, je vais surement faire ca en attendant de trouver mieux

jeudi 2 juin 2005 à 09:23:19 | Re : JTreeModel

emilien81

Réponse acceptée !
voila le code que j'ai mis en place:

public class ArbreExpandListener implements TreeWillExpandListener
{
   private ArrayList listeNoeudOuvert = new ArrayList();
   private boolean saveExpandListener = true;
   private JTree tree = null;
   private static ArbreExpandListener arbreListener = null;
   
   public ArbreExpandListener()
   {
   }
   
   public static ArbreExpandListener getInstance()
   {
      if (arbreListener==null)
      {
         arbreListener = new ArbreExpandListener();
      }
      
      return arbreListener;
   }
   
    public void treeWillExpand(TreeExpansionEvent evt) throws ExpandVetoException
   {
       if (this.saveExpandListener==true)
       {
           this.tree = (JTree)evt.getSource();
           TreePath path = evt.getPath();
   
           this.listeNoeudOuvert.add(path);
       }
    }

    public void treeWillCollapse(TreeExpansionEvent evt) throws ExpandVetoException
   {
       if (this.saveExpandListener==true)
       {
          this.tree = (JTree)evt.getSource();
           TreePath path = evt.getPath();
           TreeElement elt = (TreeElement) path.getLastPathComponent();
           for (int i=0; i<elt.getChildCount(); i++)
           {
              TreePath pathChild= ((TreeElement) elt.getChild(i)).makeTreePath();
              if (this.tree.isExpanded(pathChild))
              {
                 this.tree.collapsePath(pathChild);
              }
           }
   
           this.listeNoeudOuvert.remove(path);
       }
    }
   
    public void blockSaveExpandListener()
    {
       this.saveExpandListener = false;
    }
   
    public void unblockSaveExpandListener()
    {
       this.saveExpandListener = true;
    }
   
    public void reExpandAllExpandedNodes()
    {
       if (this.tree!=null)
       {
          for (int i=0; i<this.listeNoeudOuvert.size(); i++)
          {
             this.tree.expandPath((TreePath) this.listeNoeudOuvert.get(i));
          }
       }
    }
}


Cette discussion est classée dans : arbre, path, ajout, root, node


Répondre à ce message

Sujets en rapport avec ce message

ajout d'un nouveau volume [ par assuryan ] Bonjour,voila mon probleme :Pour le moment j'ai construit mon univers de sorte que l'utilisateur voit une dalle qu'il peut manipuler.Lorsqu'il appuis [Java] Rechercher un élément dans un arbre double chaîné!!! [ par dianeti ] Salut tout le monde,j'ai un petit problème un peu chev'lu:je crée un arbre au fur et mesure que je parcours un fichier de données afin de trouver l'ob xml ... petits trucs, comprends pas trop [ par heraclesss ] Salut à tous ! Je débute en XML avec Java. j'aimerais comprendre un truc, je n'arrive pas à trouver la réponse. Tout d'abord, j'ai choisis de dévelo algo d'ajout pour une table (à l'aide d'arbre) de manière itéative [ par yanok06 ] tout est dis dans le tittre. Si quelqu'un peut me proposer un algo cela serait super cool ! stucture d'arbre [ par jeff705 ] Bonjour, j'ai une fonction (java) qui lit une structure d'arbre (généalogique). Le noeud a chaque fois 2fils: public void lire_arbre(Node n) { Pointer vers le noeud jumeaux d'un arbre apres selection d'un click droit [ par ChristOffAum ] Bonjour à tous, Voilà je vous explique mon problème, j'ai deux arbre XML en parallèle, ils sont censé avoir la même structure, ou à défaut une légère Zoom to node [ par barraq ] Bonjour a tous, Je débute en j3D et j'ai une petite question... Je cherche une fonction permetant de zoomer ou de-zoomer etant donné un noeud, je [Windows] Inclure un .dll au PATH sans utiliser la console. [ par zinZ ] Bonjour, J'ai programmé un une interface graphique en Java 1.4 pour Windows. Elle lit des fichier au format CDF. La distribution de ce format fournit Appel de servlet dans un .ear [ par NewJavaLearner ] Salut,j'ai une servlet packagé biensur dans un .war packagé à son tour dans un .earje n'ai pas réussi à appelé la servlet malgré que j'ai fait<a href= probléme avec la boucle for [ par hassenra ] Bonjour,je veux utilié une classe dans mon projet mais elle contient ce codefor (List t1 : trees1) { for (List t2 : trees2) <p


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,512 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales