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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 13
    Points
    13
    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 confirmé 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
    Points : 554
    Points
    554
    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 à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 13
    Points
    13
    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 confirmé 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
    Points : 554
    Points
    554
    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 à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 13
    Points
    13
    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 éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    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 confirmé 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
    Points : 554
    Points
    554
    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

  8. #8
    Membre confirmé 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
    Points : 554
    Points
    554
    Par défaut
    Citation Envoyé par sinok
    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
    Sinon j'ai trouvé ça, mais pas eu le courage de tester... C'est plus stable que le JXTreeTable ? (si quelqu'un a déjà implémenté...)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    @Claythest : Haha c'est fabuleux, j'y aurai jamais pensé. Et en effet, j'suis bien chanceux! Merci bien
    Sinon, tu entends quoi par recalculer ? tu parles de la taille ?

    @sinok : Ok merci du conseil, j'y songerais.

  10. #10
    Membre confirmé 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
    Points : 554
    Points
    554
    Par défaut
    Citation Envoyé par lenwil
    @Claythest : Haha c'est fabuleux, j'y aurai jamais pensé. Et en effet, j'suis bien chanceux! Merci bien
    Sinon, tu entends quoi par recalculer ? tu parles de la taille ?

    @sinok : Ok merci du conseil, j'y songerais.
    Non, admettons que je rajoute une colonne alors que mon jtreetable est deja affiché, j'arrive a réafficher les données, mais pas l'entete (le tableheader)... Pour une JTable classique, il faut générer l'évènement suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new TableModelEvent(this, TableModelEvent.HEADER_ROW)
    Mais pour un JXTreeTable, vu qu'on a pas de TableModelListener, mais des TreeModelListener, ben je peux pas leur envoyer cet évènement... D'où mon problème...

    Mais si je ne trouve pas, je serai forcé de tester le lien que j'ai donné plus haut (et conservé au chaud ) car avec cela je devrais y arriver... Mais si on pouvait m'éviter de changer ce que j'ai déjà fait

    (désolé d'être un peu HS... mais comme j'ai déjà posté une demande sur ce forum, et n'ai pas obtenu de réponse, je tente ici... Si ca se trouve, tu vas être confronté un jour au même problème, et tu trouveras la réponse donc saches que je suis intéressé )

+ 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