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 :

Utiliser DefaultTreeCellRenderer pour JXTreeTable


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Par défaut Utiliser DefaultTreeCellRenderer pour JXTreeTable
    Est-ce quelqu'un sait comment utiliser renderer personalisé pour JXTreeTable? Pour la 1ère colonne où il y a mon tree - ça fonctionne, j'ai une icône et texte bien formaté. Mais je n'arrive pas à faire afficher une icône et texte dans d'autres colonnes.
    Dans ma view je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    jxMemosTable = new JXTreeTable(areaMemosTreeTableModel);
    AreaMessagesTreeCellRenderer renderer = new AreaMessagesTreeCellRenderer(getLocale());
    renderer.setIconMap(GENERALMEM_ICONMAP, true);
    jxMemosTable.setTreeCellRenderer(renderer);
    et dans mon renderer qui extends DefaultTreeCellRenderer j'ai ça:
    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
     
     public Component getTreeCellRendererComponent(JTree tree, Object value,
            boolean selected, boolean expanded, boolean leaf, int row,
            boolean hasFocus) {
        super.getTreeCellRendererComponent(tree, value, selected, expanded,
            leaf, row, hasFocus);
        DefaultMutableTreeNode node = null;
        if (value instanceof DefaultMutableTreeNode) {
            node = (DefaultMutableTreeNode) value;
            if (node.getUserObject() instanceof PersonsTreeNode) {
            PersonsTreeNode personsNode = (PersonsTreeNode) node.getUserObject();
            Person person= personsNode.getPerson();
            String name = DefaultFormats.PERSONCODEFORMAT.format(person
                .getPersonId())
                + " " + person.getName();
            setText(name);
     
            setIcon(..myIcon url..);
     
     
            } 
        } else if (value instanceof JLabel) {
            if (iconMap != null) {
            Icon ic = (Icon) iconMap.get(value);
            super.setIcon(ic);
            if (iconsOnly) {
                super.setText("");
                ((JLabel) this)
                    .setHorizontalAlignment(SwingConstants.CENTER);
            }
            }
        }
     
        return this;
        }
    Et je ne sais pas comment "checker" la valeur de la 2ème colonne Avec instance of JLabel, - il n'y rentre jamais... Quelqu'un a une idée ou encore mieux un exemple?

  2. #2
    Membre éclairé Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Par défaut Utiliser DefaultTreeCellRenderer pour JXTreeTable
    Ce que je ne comprends pas, - c'est quel renderer il faut utiliser pour "customiser" l'affichage dans d'autres colonnes. Si DefaulTreeCellRenderer ne s'occupe que de tree nodes, qui alors va s'occuper du reste ? DefaultTableCellRenderer. Si oui, comment peut-on avoir 2 renderers différents sur une table, est-ce possible ? Je ne comprends rien... Au secours

  3. #3
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 109
    Par défaut
    je t'avous que j'ai eu du mal a obtenir le rendu que je voulais.

    le JXtreetable est tres bien et pratique mais... pour les renderers c'est un chouilla (même un chouilla beaucoup) plus compliqué qu'un classique jtree ou jtable.

    alors pour définir les renderers de chaque colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tree.getColumn(n).setCellRenderer(...)
    tu peux utiliser le renderer d'un jtable mais il risque d'y avoir quelques soucis avec les highlights. Enfin on verra quand tu y seras.

  4. #4
    Membre éclairé Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Par défaut
    Salut Eclesia et merci pour la réponse !

    Alors à part mon treecellrenderer qui extends DefaultTreeCellRenderer je dois encore créer un renderer (qui extends DefaultTableCellRenderer) ? Et si dans mon treecellrenderer j'ajoute implements TableCellRenderer, est-ce que ça va marcher à ton avis ?

  5. #5
    Membre éclairé Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Par défaut
    Je viens de tester de faire comme tu m'avais dit:

    tree.getColumn(n).setCellRenderer(...)

    Mais dans la méthode

    public Component getTreeCellRendererComponent(JTree tree, Object value,
    boolean selected, boolean expanded, boolean leaf, int row,
    boolean hasFocus)

    il n'y a pas de méthode "getColumn" sur mon tree.

    Et l'implémentation de TableCellRenderer au sein de mon TreeCellRenderer n'a rien donné Alors je ne sais plus...J'ai aussi redardé la doc de SwingX. Il n'y a de méthode qui permettrai de récupérer une colonne ni dans JXTreeTable, ni dans JXTree. Par contre, elle existe dans TableColumnModel. je vais le tester.

  6. #6
    Membre éclairé Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Par défaut
    Yesssss ! CA FONCTIONNE !
    Voilà ce que j'ai fait:
    //MonTableCellRenderer extends DefaultTableCellRenderer

    MonTableCellRenderer lbRenderer = new MonTableCellRenderer ();
    lbRenderer.setIcon(GENERALMEM_ICON, true);
    jxTableColumnModel.getColumn(ClientMemosTreeTableModel.COL_MEMOS).
    setCellRenderer(lbRenderer);

Discussions similaires

  1. [USB] [JNI] Utiliser JNI pour accéder aux ports USB
    Par Javatator dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 27/10/2005, 06h40
  2. Utiliser awk pour supprimer des retours charrios
    Par tomsoyer dans le forum Linux
    Réponses: 3
    Dernier message: 03/01/2005, 18h27
  3. Utiliser Alien pour convertir un deb en rpm
    Par aA189 dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 10/10/2004, 15h41
  4. Utiliser hylafax pour envoyer des fax
    Par ggnore dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 08/07/2004, 21h57
  5. utiliser "if" pour faire deux actions differente
    Par vampyer972 dans le forum C
    Réponses: 2
    Dernier message: 09/05/2004, 10h12

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