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 :

JXTreeTable disparition des icones expand/collapse


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut JXTreeTable disparition des icones expand/collapse
    [edit] j'avais commencé à parler de JTree et JModel pour simplifier, mais il s'agit en realité de l'utilisation de JXTreeTable et de JXTreeTableModel

    Bonjour à tous,

    Alors voila, jusqu'à présent j'ai réussi à établir des arbres avec des models bien à moi implementant l'interface TreeModel, sans problemes. Dans ces models, tous les objets etaient de le même classe.

    Maintenant, j'ai besoin de me faire un nouveau TreeModel, mais avec des noeuds dont les classes peuvent etre différentes.
    J'ai donc une classe pour la racine, une classe représenter les noeuds et une autre pour feuilles. Cette organisation me sert pour la partie metier, et j'essaie de calquer cela sur un model d'arbre pour la présentation.

    Cela fonctionne à moitié. Car mon soucis est que dans l'arbre, les icones "+" et "-" pour étendre ou reduire les noeuds n'apparaissent plus. Il faut egalement que j'applique manuellement un "expandAll()" pour tout voir. Cela dit, la hierachie est bien respectée, mais il n'y a plus non plus les petits décallages des fils par rapport aux parents.

    Cela viendrait-il du fait que j'utilise des classes différentes pour chaque niveau de mon arbre ?
    Ou sinon de quel coté pourrais-je chercher ? J'ai également essayer un tas de choses dans le TreeCellRenderer mais cela n'a pas le moindre effet...

    Bref, si quelqu'un a une idée...

    Merci ^^

  2. #2
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Ca semble osbcur... Si tu laisse le TreeCellRenderer par défaut, cela plante-t-il toujours ?

    Si oui, il nous faudrait voir ton code... celui du tablemodel, et celui ou tu initialises ton JTree (voir si tu mets pas des mauvaises options...)...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut
    Mmmh j'imagine, cela n'est pas tres clair.

    Le CellRenderer que j'utilise ne fait que retirer les icones "dossier" et "fichier" par défaut. Enfin, même si je ne l'applique pas, et que je laisse tel quel, j'ai le même soucis, à savoir pas d'icones, et pas de "+" et "-" pour la manipulation de l'arbre.

    Dans mon TreeModel, je procède de la sorte :

    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 DataTreeModel implements TreeTableModel {
     
    	private X root;
     
    	public DataTreeModel(X root) {
    		this.root = root;
    	}
     
    	public Object getRoot() {
    		return root;
    	}
     
    	public Object getChild(Object parent, int index) {
    		if(parent instanceof X) {
    			return ((X) parent).getChildAt(index);
    		}
    		if(parent instanceof Y) {	
    		 	return ((Y) parent).getChildAt(index);
    		} 
    		return null;
    	}
     
    	public int getChildCount(Object parent) {
    		if(parent instanceof X) {
    			return ((X) parent).getChildCount();
    		}
    		if(parent instanceof Y) {
    		 	return ((Y) parent).getChildCount();
    		}
    		return 0;
    	}
     
    	public boolean isLeaf(Object node) {
    		return node instanceof Z;
    	}
     
    	// [...]
    }
    Rien de bien extraordinaire, avec donc X, Y et Z des classes différentes. X possède une liste de Y qui sont ses fils. Et chaque objet Y possède une liste de Y ou Z. Les objets de classe Z sont les feuilles de mon arbre. Les classes X et Y ont des methodes getChildCount() et getChildAt(int) qui retournent le nombre d'elements dans leur liste de fils et celui à l'indice donné.

    Pour ce qui est de l'initialisation de l'arbre, j'appel juste le constructeur de JTree qui prend un TreeModel en parametre. Je faisais avant un setCellRenderer(TreeCellRenderer) mais cela ne change rien si je l'enlève.

    Pour ce qui est du comportement, l'arbre s'affiche mais je ne vois que les premiers noeuds, avec l'impossibilité de les developper à la souris. Par contre, en appelant la methode expandAll(), tout y est, mais pareil, aucune interraction possible à la souris pour ce qui est des extentions ou reduction de noeuds, vu que les icones n'apparaissent pas.

    Voila un visuel de ce que j'obtient.

    Les cadres rajoutés à la main montrent la hiérachie prévue, mais comme vous le voyez, tout est affiché à plat. Sans le expandAll(), je ne vois juste que les deux premiers "Objet de classe Y". Pour ce qui est des objets de classe X, il n'y en a qu'un et c'est la racine. Je ne l'affiche pas volontairement.

    Voila, j'espère que mon petit problème est plus clair à présent

  4. #4
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Tu utilises quel Look n feel ?

    En laissant le treecellrenderer par défaut, tu ne devrais avoir aucun problème de la sorte...

    Ecris le code minimum qui te fait ce bug : ca prend un peu de temps, mais on finit toujours pas trouver la cause du problème ainsi

    Si tu as besoin d'aide, poste ton code, qu'on puisse tester chez nous et te dire

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Par défaut
    Bon, j'ai été très bête de vouloir simplifier le probleme en parlant de JTree.
    J'utilise en réalité un JXTreeTable de swingx, pour mes besoins de présentation,et parceque je developpe sur un jre 1.5.
    Je croyais que le comportement serait du pareil au même... ben pas vraiment

    En effet, j'ai tout transformer en véritable JTree, ça marche nickel. Désolé te t'avoir fait douter.
    Le probleme vient donc de JXTreeTable, mais j'arrive pas à voir d'où cela vient, puisque mes données s'affichent bien comme je le veux là où je le veux. Seul le comportement en arbre ne passe pas.

    Je vais editer le titre du sujet deja... ça sera mieux.

  6. #6
    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 ce qui concerne la JXTreeTable, le problème est que ce composant n'est pas encore considéré comme stable et qu'en ce moment même un certains nombre de bugs sont en cours de correction...
    Donc perso j'éviterais de l'utiliser tant que celà peut se faire.

    Limite autant splitter l'écran en deux partie, une contenant un JTree et l'autre une J(X)Table dans laquelle sera affichée le détail du node sélectionné dans le J(X)Tree

  7. #7
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Citation Envoyé par lenwil
    Bon, j'ai été très bête de vouloir simplifier le probleme en parlant de JTree.
    J'utilise en réalité un JXTreeTable de swingx[...]


    Ben voila, cherche plus, la voila la réponse à ta question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public Class getColumnClass(int column) {
            Class result = null;
            if (column == MON_INDEX_JTREE)
                    result = TreeTableModel.class;
            else
                    result = String.class;
            
            return result;
        }
    Voila le coup de baguette magique

    (J'ai été confronté au même problème il y a peu, t'es un chanceux )

    Et tant que tu y es, si un jour tu trouves l'évènement qu'il faut générer pour ordonner au table header se recalculer, fais moi signe

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/06/2011, 11h52
  2. Disparition des icones du bureau au démarrage
    Par plancade dans le forum Ubuntu
    Réponses: 6
    Dernier message: 13/08/2009, 15h00
  3. Disparition des icones dans l'explorateur windows
    Par Lexot2 dans le forum Windows XP
    Réponses: 3
    Dernier message: 31/08/2006, 09h26
  4. Faire des icônes
    Par Gnux dans le forum Gnome
    Réponses: 6
    Dernier message: 01/12/2003, 15h51
  5. [FORMS] Chemin des icones (intégré FAQ 150 QR)
    Par jerome62 dans le forum Forms
    Réponses: 2
    Dernier message: 30/07/2002, 08h32

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