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

SWT/JFace Java Discussion :

Charger un TreeViewer


Sujet :

SWT/JFace Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut Charger un TreeViewer
    Bonjour,

    Je voudrais savoir s'il y a une méthode pour initialiser complètement un TreeViewer.

    Il me faut pourvoir détecter automatiquement un certain type de répertoire.
    Ma fonction parcourt en profondeur mon arbre.

    Le problème est que lorsque on rencontre un nœud jamais explorer, il n'a pas encore liée la donnée au nœud.
    Pour éviter ce problème, je fait un expendAll() juste avant ma recherche. Ce qui provoque une apparition éclair indésirable.

    De plus, l'ouverture complète de l'arbre prend du temps. Ce qui freeze l'interface.

    Mon traitement est dans un job :
    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
    public class JobMediadataTreeLoader extends Job {
     
    	private MediaData 	rootMediaData 	= null;
     
    	/**
             * Constructeur de la classe <code>JobMediadataTreeLoader</code>.
             */
    	public JobMediadataTreeLoader() {
    		super("Analyse of data directory");
    	}
     
    	/**
             * Retourne la variable <code>rootMediaData</code> de type <code>MediaData</code>.
             * @return la variable rootMediaData
             */
    	public MediaData getRootMediaData() {
    		return rootMediaData;
    	}
     
    	/**
             * Positionne la variable <code>rootMediaData</code> de type <code>MediaData</code>.
             * @param rootMediaData la variable rootMediaData à positionner.
             */
    	public void setRootMediaData(MediaData rootMediaData) {
    		this.rootMediaData = rootMediaData;
    	}
     
    	/**
             * {@inheritDoc}
             * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
             */
    	@Override
    	protected IStatus run(IProgressMonitor monitor) {
    		if(rootMediaData != null) {
    			rootMediaData.analyseRecursive();
    		}
    		return Status.OK_STATUS;
    	}
    }
    et l'arbre surveille la fin du job :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	@Override
    	public void done(IJobChangeEvent event) {
    		System.out.println("done");
    		if(event.getJob().equals(job)) {
    			this.getDisplay().syncExec(new Runnable() {
    				public void run() {
    					treeViewer.setInput(job.getRootMediaData());
    					treeViewer.expandAll();
    					openAndSelectAllProduct(treeViewer.getTree().getItems());
    					changeSupport.firePropertyChange("product list", null, null);
    				}
    			});
    		}
    	}
    La fonction done est bien appeler avant que l'interface ne freeze. Donc le problème vient bien de la construction de l'arbre.

    Que puis-je faire pour régler ces problèmes ?

    Merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Par défaut
    Voir le thread suivant :
    http://www.developpez.net/forums/d82...d/#post4709838

    Cela pourrait répondre à ton problème.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    A ben la pour le coup oui, c'est exactement la même chose ^^"

    Donc je vais utiliser le "setRedraw(false);"

    Toutefois, est ce que la remarque de Gueritarish ne s'applique pas ?
    Ne sachant pas a quoi sert le reveal, je vais étudier et je revient ^^

    Merci.

  4. #4
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Salut,

    Pour un parcours de tout ton TreeViewer, je pense que la méthode revea()l ne t'aidera pas. Puisque, pour cette méthode, il te faut avoir l'instance de l'élément à révéler...
    Je pense que la solution de ewuillai, pour le coup, est la meilleure.

    Voilà, à+
    Gueritarish

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    Je me suis aperçu qu'il y a un phénomène étrange lors de la modification des fils.


    J'ai un arbre pour admettons explorer mes répertoires.
    Mon arbre a une fonction pour tout cocher/décocher. On a vu que pour que cette fonction marche, il fallait étendre tous les nœuds.

    Maintenant, j'ai aussi une fonction pour afficher/masquer les fichiers simples.

    Au départ, les fichiers sont cachés.
    J'étends et réduit mon arbre.
    La fonction cocher/décocher marche a merveille.
    Je demande à afficher mes fichiers simples.
    La fonction cocher/décocher ne marche plus (au niveau des répertoires non ouverts).

    J'ai donc déduit que dès que l'on apporte des modifications à la liste des fils d'un item, il reconstruit intégralement sont noeud. Et si il était ouvert avant, ils recontruient les sous items. Sinon, il s'arrête là, et on retombe dans le problème du début du thread.

    Y aurait il une solution ?

Discussions similaires

  1. Charger unn TreeView sous VB2005
    Par Delphi-ne dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/09/2009, 11h24
  2. charger un treeview a partir d'un dataset
    Par paquito dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 04/09/2008, 22h32
  3. charger les références d un projet dans un treeViewer
    Par *alexandre* dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 14/11/2007, 16h03
  4. charger un sous formulaire avec un treeview
    Par alexkickstand dans le forum IHM
    Réponses: 2
    Dernier message: 11/10/2007, 17h26

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