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 :

jTree : Synchronisation avec le model


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Par défaut jTree : Synchronisation avec le model
    Bonjour,

    Je développe actuellement une application qui utilise un jTree. Ce jtree affiche, par l'intermediaire d'un treeModel (une classe à moi qui implémente TreeModel), des objets de ma couche metier (model). L'abre d'objets est formé par une seule classe avec un principe de reflexivité. Actuellement cela fonctionne trés bien mais par contre, les modifications de mon model ne sont pas répercutées sur mon jTree.

    Ce que je voudrais, c'est que dés que le model est modifié (pas forcément par l'intermédiaire du jTree) l'affichage dans le jTree soit automatiquement mis a jour. J'ai cherché des éxemple mais je n'ai rien trouvé qui corresponde à mon besoin. Besoin qui me parait pourtant classique, non ?

    Je vais peut-etre devoir "fire" des évenements au niveau de mes objets metier ? Peut etre que ces évenement vont devoir remonter tout l'arbre de mes objets pour arriver jusqu'a la racine référencée par mon treeModele qui poura alors transmettre l'info au jTree ?? Des objets metiers doivent-ils "fire" des evenements ?? Ne cerai-ce pas une entorse à la logique qui veut que ses objets se contentent de gerer les données metier ?
    En gros, je ne sais pas vraiement dans quel sens aller...

    PS : je fais du Java depuis moins d'un mois, je ne suis donc pas un "expert".

    Si vous pouviez me donner quelques bonnes pistes, ca me ferait gagner un tps précieux.

    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Non c'est le model lui même qui doit envoyer le fire quand ses données internes sont changées.... donc les diverse méthodes d'ajout/supression de ton model doivent faire appel à la méthode fire qui va bien...

  3. #3
    Membre confirmé Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Par défaut
    Donc, si j'ai bien compris, je dois enregistrer un listeneur auprés de mon modele et appeler les methodes de ce dernier dans mes objets metiers ?
    Mais je ne peux pas enregistrer un listeneur pour chaque instance de ma classe metier....
    Je pense qu'il va faloir m'en dire un peu plus.... Merci.

  4. #4
    Membre confirmé Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Par défaut
    J'ai trouvé un lien interessant :
    http://java.sun.com/products/jfc/tsc...ree/index.html

    Un peu tendu pour mon niveau mais j'essaye de comprendre...

  5. #5
    Membre confirmé Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Par défaut
    Bon, je commence à m'en sortir.

    Voici ma petite contribution, en complément du lien dans mon précédent méssage :
    Le principe est que le TreeModel est secé appeler des méthodes de ses listeneurs pour les avertir des changements.
    Par défaut, le JTree s'enregistre tout seul en tant que listeneur du TreeModel quand on lui assigne.
    Pour ma part, je n'ai pas retouché à mes objets metier. J'ai simplement implémenté des methodes qui modifient le modele dans mon TreeModel qui appel alors les méthodes de mes objets metiers et préviens le JTree pour mettre l'affichage a jour.

  6. #6
    Membre confirmé Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Par défaut
    Il y a encore une petite chose que je n'arrive pas à faire :
    Quand je dois fire un TreeNodesChanged sur ma racine, comme le path doit etre de la racine au parent de la tache concernée, je suis bien obligé de donner un chemin null. Pourtant, ca me genere une erreure dans la console.

    Voici un extrait de mon code (Mes objets métier sont des "Task"):
    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
    	public void setTaskLabel(Task t, String newName){
    		//Ne fait rien si t ou son parent est null
    		if(t==null || t.getParentTask()==null)return;
     
    		//fabrique l'évenement à transmetre à la vue
    		Object[] path = getTaskPath(t);
    		int[] childIndex={t.getParentTask().getSubTasks().indexOf(t)};
    		Object[] child = {t};
    		TreeModelEvent e=new TreeModelEvent(this, path,childIndex,child);
     
    		//Définit le label de la tache
    		t.setLabel(newName);
     
    		//Previens la vue
    		fireTreeNodesChanged(e);
    	}
    	private Object[] getTaskPath(Task t){
    		ArrayList a=new ArrayList();
    		while(t.getParentTask()!=null){
    			t=t.getParentTask();
    			a.add(0, t);
    		}
    		return a.toArray();
    	}
    Du coup, pour le moment, je n'agit que si la tache concernée n'est pas la racine...

    Une idée ?

Discussions similaires

  1. [Toad Data Modeler] Synchronisation avec la base
    Par fabko dans le forum Autres
    Réponses: 0
    Dernier message: 29/09/2008, 14h38
  2. Problèmes d'affiche du header de mon JTable avec un Model
    Par Baptiste Wicht dans le forum Composants
    Réponses: 16
    Dernier message: 08/02/2006, 18h37
  3. [VB.NET] DataGridView et synchronisation avec une BD
    Par tidan dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/02/2006, 11h12
  4. [JTree] Feuille avec CheckBox
    Par redtux dans le forum Composants
    Réponses: 4
    Dernier message: 27/10/2005, 20h11
  5. [JTree] TreeNode avec icon
    Par Breiz-ilien dans le forum Composants
    Réponses: 3
    Dernier message: 05/04/2005, 16h26

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