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 : changer le comportement d'édition d'une cellule


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut JTree : changer le comportement d'édition d'une cellule
    Bonjour.

    J'aimerais que lorsque j'édite une cellule d'un JTree il ne remplace pas mon UserObject par un objet String mais plutôt qu'il modifie mon objet, d'une façon que je décide. Malheureusement je n'arrive pas à mettre la main sur la méthode qui met à jour le noeud, si vous pouviez m'éclairer...

    Merci d'avance


    edit: et m.... désolé je n'avais pas vu le sous-forum dédié aux arbres, si un modo pouvait envoyer le sujet là-bas

  2. #2
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Citation Envoyé par ThzChz Voir le message
    J'aimerais que lorsque j'édite une cellule d'un JTree il ne remplace pas mon UserObject par un objet String mais plutôt qu'il modifie mon objet, d'une façon que je décide.
    A mon avis, la solution la plus simple et la plus convivial qu'on puisse imaginer est la suivante:
    Ouvre un dialogue par double clique ou menu contextuel sur le noeud. Dans ce dialogue, tu édite les propriétés du noeud. En validant, tu peux faire toutes les mises à jour que tu veux

  3. #3
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Citation Envoyé par uhrand Voir le message
    A mon avis, la solution la plus simple et la plus convivial qu'on puisse imaginer est la suivante:
    Ouvre un dialogue par double clique ou menu contextuel sur le noeud. Dans ce dialogue, tu édite les propriétés du noeud. En validant, tu peux faire toutes les mises à jour que tu veux
    J'envisage effectivement de faire comme ça si je ne trouve pas le moyen de modifier l'édition. Mais je ne sais pas si c'est vraiment plus simple, il faudrait avoir l'autre solution pour comparer.
    Le texte est édité à travers un JTextField renvoyé par getTreeCellEditorComponent du TreeCellEditor. Il y a bien un moment où le contenu de ce JTextField est remis dans l'UserObject. Une petite ligne au bon endroit et le tour est joué, mais à quel endroit...

  4. #4
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    920
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 920
    Par défaut
    De mémoire, si dans ton TreeCellEditor tu override la méthode stopCellEditing(), tu devrais y arriver. En combinant avec getCellEditorValue(). De ton JTextField tu récupères le string que tu balances dans l'objet édité que tu récupères via le getCellEditorValue().

  5. #5
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Citation Envoyé par lvr Voir le message
    De mémoire, si dans ton TreeCellEditor tu override la méthode stopCellEditing(), tu devrais y arriver. En combinant avec getCellEditorValue(). De ton JTextField tu récupères le string que tu balances dans l'objet édité que tu récupères via le getCellEditorValue().
    Sans succès malheureusement. Bon, stopCellEditing() n'est pas appelé lors d'une édition mais l'idée y était, j'ai ajouté un CellEditorListener et editingStopped(ChangeEvent e) pourrait bien être la méthode que je cherche. J'ai surchargé getCellEditorValue() pour renvoyer l'userObject de mon noeud de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            @Override
            public Object getCellEditorValue()
            {
                DefaultMutableTreeNode node = (DefaultMutableTreeNode) lastPath.getLastPathComponent();
                return node.getUserObject();
            }
    Mais j'ai pas l'impression que c'est ça que je devais faire car cela empèche l'édition du noeud. Passer le String de mon objet à la place de tout l'objet produit le même résultat.
    Sans la surcharge, dans editingStopped, le renderer (JTextField) contient la nouvelle valeur mais le noeud est écrasé et avec la surcharge il contient la valeur du noeud.

    Curieusement le ChangeEvent est inutilisable, il refuse de cast :
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.tree.DefaultTreeCellEditor$1 cannot be cast to javax.swing.tree.DefaultTreeCellEditor
    J'ai du mettre mon CellEditorListener en innerclass du TreeCellEditor pour les tests.

    Soit je m'y prends mal pour la surcharge soit ce n'est pas à cet endroit que je peux intercepter le changement.

  6. #6
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    920
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 920
    Par défaut
    Citation Envoyé par ThzChz Voir le message
    Sans succès malheureusement. Bon, stopCellEditing() n'est pas appelé lors d'une édition
    Ce que tu dis m'étonnes. Pour moi il est appellé quand le tree (ou la table) estime que l'édition de la cellule est terminée, par exemple quand tu changes de ligne. Je vais vérifier dans mes sources.

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/05/2009, 15h54
  2. JTable : édition d'une cellule de type Date
    Par SheikYerbouti dans le forum Composants
    Réponses: 5
    Dernier message: 08/12/2007, 08h50
  3. comment changer l'image de fond d'une cellule par un menu ?
    Par @rno0059 dans le forum Mise en page CSS
    Réponses: 18
    Dernier message: 25/06/2007, 00h06
  4. [JTable] Déplacer le focus et l'édition d'une cellule
    Par nicorama dans le forum Composants
    Réponses: 1
    Dernier message: 27/04/2007, 03h58
  5. Réponses: 8
    Dernier message: 30/03/2007, 16h09

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