begin process at 2010 02 10 14:51:18
  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) { 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 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 Récupérer le path du menu démarrer et la cible d'un raccourci [ par hyunikel ] Bonjour à tous, J'espère que je pose ma question dans le bon thème. 1- Est ce que c'est possible de récupérer le path du menu démarrer de Windows qu Matrice niveau de gris Java. [ par edbarbier ] suis débutant. Le programme compile mais ne me renvoi rien. En faisant divers tests, j'ai eu parfois des erreurs de compilation du genre variable pas Afficher un fichier XML sous forme d'arbre graphique avec jbuilder [ par iskes ] Bonjour, j'ai un fichier XML qui contient un texte structuré . je veux affiche ce texte sous forme d'arbre graphique avec jbuilder SVP aider moi c'es


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 1,373 sec (4)

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