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

AWT/Swing Java Discussion :

[TreeModel]Problème de conception


Sujet :

AWT/Swing Java

  1. #1
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut [TreeModel]Problème de conception
    Bonsoir,

    Dans mon application, j'ai besoin d'utiliser un JTree pour afficher une liste de films ou d'acteurs ou de réalisateurs que j'ai besoin de trier, par genre, par type, par année, par note, ... Les types de tri ne sont pas les mêmes en fonction de ce que j'affiche (films, acteurs, réalisateurs).

    Concrètement, ça veut dire :

    • Contenus :
      • Films
        • Tri par genre
        • Tri par type
        • Tri par année
        • ...
      • Acteurs
        • Tri par note
        • Tri par année
        • ...
      • Réalisateurs
        • Tri par note
        • Tri par année
        • ...


    Tous ces types de données sont contenus dans des classes : Acteur, Film, Realisateur, ... que je peut au besoin faire implémenter une interface commune sans problèmes.

    De plus, ça va être dynamique, j'aurai un bouton pour changer le type de tri. Par contre, le modèle ne sera pas dynamique au niveau contenu, il contiendra toujours la même chose...

    Donc je ne vois pas trop comment faire, mis à part créer pleins de models, un pour chaque type de tri et pour chaque type de contenu, mais ça ne me semble pas du tout optimal et très lourd

    Je sais pas si j'ai été tout à fait clair sur ce que je voulais

    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
    On va dire que tu vas chercher quand même relativement loin niveau complexité car c'est simplement une partie de ton model qui doit être trié, je ne suis pas sûr qu'offrir un composant tel que celui ci va être optimal.

    Bon sinon l'idée est de rajouter un model intermédiaire entre ton JTree et le model initial. Ce model aura pour but de trier tes données et les agencer (pour le filtrage tu peux procéder de la même façon).

    Mais personnellement je trouve que c'est un peu sortir l'artillerie lourde là où un bonne vieille JXTable bien utilisée pourrait faire l'affaire.
    Grosso modo tu choisit ce que tu veux voire dans un menu, une barre de boutons ou quoi que ce soit, puis tu affiches la table triable selon les désirs de l'utilisateur, il a juste à appuyer sur le haut des colonnes, puis tu ouvres un JDialog présentant les infos que tu veux afficher.

    Je ne me souviens pas avoir déja manipulé un composant aussi effroyablement compliqué que ce que tu proposes en tant qu'utilisateur...


    [edit] j'oubliais: voilà un tuto sun décrivant comment effectuer les opérations de tri sur une JList, à toi d'adapter le process à un JTree si tu en as le courage: http://java.sun.com/developer/techni.../sorted_jlist/

  3. #3
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Je vois pas vraiment ce qu'à mon composant de compliqué

    Je me suis peut-être mal exprimé, mais en fait, c'est la conception du modèle qui pose problème, le composant est un simple JTree.

    Voilà un dessin (vous moquez pas ) de ce que je veut réaliser.

    Sachant que j'aurai trois fois ca (et peut-être plus dans le futur) avec les autres fois des acteurs et des réalisateurs possédant chacun des tris spécifiques.
    Images attachées Images attachées  

  4. #4
    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
    Arf en fait j'ai mal du comprendre ton explication.

    Donc un moyen simpa pourrait être de créer un type spécial de TreeNode proposant de trier les informations qui sont contenues dedans. Pour ça tu pourrais t'appuyer sur un outils comme les Glazed List qui proposent du tri et filtrage des éléments à la volée.

    La liste à utiliser sera une SortedList issue de l'Api GlazedList, et tu peu lui affecter un Comparator
    Ensuite il sufft que ton type de node possède une méthode setComparator qui transmet ton comparator à la SortedList celle ci effectuant le tri des nodes.

    En fait ceci va concerner d'après ce que j'ai compris que des nodes contenant des films, ensuite tout dépend de comment tu as modélisé tes beans de base afin que ce soit facile à faire...

    et puis une méthode permettant de propager le changement de comparateur depuis le model bien sûr si besoin est (en parcourant l'arbo et à grand coup de vérification de type dynamique avec des instanceof)

  5. #5
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Je suis pas sûr Glazed List fasse ce que je veut Je préfère rester sur un simple JTree

    En fait, je n'ai pas tout à fait besoin de tri, j'ai juste besoin de pouvoir changer facilement l'organisation du JTree et si possible d'un modèle le plus générique possible, pour pouvoir utiliser le même modèle pour les acteurs, les réalisateurs et les films et pouvoir changer le type de "tri" (c'est pas vraiment du tri, c'est juste si on fait des nodes année, des nodes genre ou des nodes types avec des Child film).

    Je pensais pas que c'était si compliqué, je pensais juste qu'un simple modèle me suffirait, mais je comprends pas vraiment comment le réalisaer

  6. #6
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Je crois que ce n'est pas si trivial que ça à faire (je m'y étais déjà un peu penché, mais j'ai abandonné). J'étais parti sur un unique TreeModel, qui dispose de plusieurs RootNodes (selon la catégorie).
    - à l'ajout d'un élément, créer autant de TreeNodes que de racines, les insérer sous la bonne racine au bon endroit (trier)
    - au changement de mode d'affichage, sélectionner une racine différente et faire un fireToutAChangé(..)
    - getRootNode renvoie la racine qui correspond au mode d'affichage

    Voila ce que j'en pense, mais je ne sais pas si je t'ai apporté grand chose.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  7. #7
    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
    sauf que ça entraine un bonne grosse surcharge du model, et pour peu qu'il y ait un paquet de films BAM la ram.
    Donc tout dépend de la volumétrie.

    Sinon tu pourrais imaginer un JTree qui ne charge les films qu'à l'expand des noeuds:

    Mais pour celà il faut que tu ais différent type de nodes, ou au minimum des nodes qui contienent une information quant à leur type (genre le type et un identifiant).
    Au moment ou il y a un expand du node, en fonction des infos qu'il contient tu récupère de la base les infos voulues (en fontion du type et de l'identifiant du node qui réalise l'expand...)

    Mais bon ça impose une petit bidouille (car le noeud à la base n'a pas d'enfant), c'est à dire tant qu'il n'a pas réalisé d'expend lui ajouter un noeud fake pour qu'il puisse réaliser l'expand et à ce moment là lui balancer la liste des films qu'il doit afficher et retirer le fake.
    Et ceci ne doit être réalisé qu'au premier expand (prévoire un booléen et les accesseurs qui vont avec)

    Et comme ça pour changer le tri il te suffirait de recréer l'arbo de base sans recharger tout les films...

    ça pourrait être jouable mais ça fait très bidouille...
    Y'a surement mieux.

  8. #8
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Bon, je vais essayer de créer mon treeModel, je vais voir ce que j'arrive à faire...

    Je vais partir sur l'idée d'un seul modèle, le plus générique possible. J'espère juste que je vais m'en sortir avec les modèles de JTree

  9. #9
    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
    En fait un treemodel c'est un seul TreeNode c'est tout
    En fait tu construis un arbre de DeafultMutableTreeNode et tu crées le model à partir d'un treenode

    Donc le problème n'est pas forcément de définir le TreeModel (un DefaultTreeModel suffit généralement amplement) mais de savoir comment tu vas contruire l'arbre de nodes permettant de créer ton TreeModel

  10. #10
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par sinok
    En fait un treemodel c'est un seul TreeNode c'est tout
    En fait tu construis un arbre de DeafultMutableTreeNode et tu crées le model à partir d'un treenode

    Donc le problème n'est pas forcément de définir le TreeModel (un DefaultTreeModel suffit généralement amplement) mais de savoir comment tu vas contruire l'arbre de nodes permettant de créer ton TreeModel
    Oulah, je commence à être perdu maintenant

    Donc, je dois faire une classe étendant DefaultTreeModel et une classe étendant TreeNode.

    Donc le DefaultTreeModel c'est l'ensemble de l'arbre et TreeNode c'est un simple étage de l'arbre, c'est bien ca ?

  11. #11
    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
    Le TreeNode est un Noeud de l'arbre: ça peut être un embranchement comme un feuille

    et el DefaultTreeModel se construit avec une référence vers la racine de l'arbre.


    Grosso modo commences par faire joujou avec des DefaultMutableTreeNode et un DefaultTreeModel avant de vouloi rn faire plus

  12. #12
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par sinok
    Le TreeNode est un Noeud de l'arbre: ça peut être un embranchement comme un feuille

    et el DefaultTreeModel se construit avec une référence vers la racine de l'arbre.

    Grosso modo commences par faire joujou avec des DefaultMutableTreeNode et un DefaultTreeModel avant de vouloi rn faire plus
    Ok, je vais voir ce que je peut faire avec ces deux classes, tu connais un bon tuto pour la gestion des Tree en Java ?

  13. #13
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Je pense que tu as déjà regardé les tutos de Sun mais bon celui-là mérite d'étre cité, peut-étre qu'il servira à quelqu'un d'autre qui passerait par ce topic.

    P.S: wichtounet 2500 messages


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  14. #14
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par afrikha
    Je pense que tu as déjà regardé les tutos de Sun mais bon celui-là mérite d'étre cité, peut-étre qu'il servira à quelqu'un d'autre qui passerait par ce topic.
    Oui, je l'avais déja lu, mais il m'a donné une nouvelle idée, je vais en fait certainement passer par une classe qui va remplir mon JTree en fonction de certains paramètres.

    Citation Envoyé par afrikha
    P.S: wichtounet 2500 messages
    En effet, j'avais pas vu


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Méthode Finalize et problème de conception
    Par phryos dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2006, 11h04
  2. [VB6][UserControl et OCX]Problème de conception
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/01/2006, 22h37
  3. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 18h24
  4. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 13h08
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13

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