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 :

[Swing] Événement signalant la fin de l'édition d'un noeud JTree ?


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Avatar de osopardo
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut [Swing] Événement signalant la fin de l'édition d'un noeud JTree ?
    Bonjour,

    J'affiche des Jpanel pour l'édition de noeud dans un arbre Swing avec différents JTextField pour saisir des valeurs.

    Mon problème est maintenant de récupérer ces valeurs, à commencer par signaler la fin d'édition du noeud, je n'arrive pas à saisir dans le code source des JTextField ce qui fait comprendre à l'arbre qu'on à finit l'édition (qui par la suite signalera le changement et repassera en affichage classique).

    Je pense ajouter un bouton à mes JPanel pour que l'utilisateur signale la fin de l'édition, reste à trouver comment relayer l'information à qui de droit...

  2. #2
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    Ajoute des FocusListener à tes JTextFields, une fois le focus perdu, tu auras ton évènement de fin d'édition

  3. #3
    Membre confirmé
    Avatar de osopardo
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Quels FocusListener je doit ajouter ? Qu'est ce que je doit mettre à l'intérieur ?
    Est-ce que ça ne risque pas de mettre fin à l'édition dès le premier JTextField édité ?

  4. #4
    Membre confirmé
    Avatar de osopardo
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    J'ai trouvé deux solutions via des méthodes de JTree :
    • stopEditing() qui provoque la fin de l'édition, utilisable avec mon bouton
    • setInvokesStopCellEditing(true) qui sauvegarde les modifications si on clique sur un autre noeud (par défaut c'est à false ce qui annule les modifications)

  5. #5
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    Admettons que tu aies 2 textfields, tu fais
    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
     
    monTf1.addFocusListener(new FocusListener(){
    				public void focusGained(FocusEvent arg0) {
                                         System.out.println("Focus gagné par tf1");
    				}
    				public void focusLost(FocusEvent arg0) {
                                         System.out.println("Focus perdu par tf1");
    				}});
    monTf2.addFocusListener(new FocusListener(){
    				public void focusGained(FocusEvent arg0) {
                                         System.out.println("Focus gagné par tf2");
    				}
    				public void focusLost(FocusEvent arg0) {
                                         System.out.println("Focus perdu par tf2");
    				}});

  6. #6
    Membre confirmé
    Avatar de osopardo
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    Ma question n'était pas vraiment de savoir comment utiliser des écouteur mais comment ça pourrait me servir à signaler une fin d'édition.

    En d'autres termes je ne voulais pas un moyen de savoir quand mon JPanel avait finit d'être édité mais un moyen de le faire savoir aux composants swing pour que le noeud édité repasse en simple affichage.

  7. #7
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    J'ai pas compris le dernier message...
    En d'autres termes je ne voulais pas un moyen de savoir quand mon JPanel avait finit d'être édité mais un moyen de le faire savoir aux composants swing pour que le noeud édité repasse en simple affichage.
    Ce que j'avais compris, c'était que tu voulais un moyen de signaler la fin d'édition d'un textfield...

  8. #8
    Membre confirmé
    Avatar de osopardo
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Par défaut
    J'avais compris que tu ne m'avais pas tout à fait compris

    D'habitude quand on édite un noeud d'arbre, on utilise explicitement ou pas un DefaultTreeCellEditor qui fournit un JTextField pour éditer le noeud.

    Moi j'avais plusieurs champs de l'objet associé au noeud à modifier, donc j'ai fait le gros bourrin en surchargeant la méthode getTreeCellEditorComponent() pour qu'elle renvoi un Jpanel de ma composition avec plusieurs JTextField.
    Pour signaler la fin de l'édition du noeud je peut difficilement me baser sur la fin de l'édition des JTextField vu qu'il y en a plusieur et que l'utilisateur peut en modifier n dans l'ordre qu'il veut.
    J'ai donc ajouter un bouton avec un ActionListener sur lequel l'utilisateur doit cliquer pour signaler qu'il a finit d'éditer le noeud.
    Vient alors la question une fois dans l'ActionListener : "Et comment que je fais moi pour dire au reste des composants swing affichant l'arbre que l'édition est terminée ?"
    Et bien en appelant la méthode stopCellEditing() (interface CellEditor) déjà implémenter par DefaultTreeCellEditor dont j'hérite pour avoir mon éditeur personnalisé sans réinventer la roue.

    Dans la foulée une autre méthode utile de l'interface CellEditor est getCellEditorValue() qui doit donc être surchargée si l'on hérite de DefaultTreeCellEditor et qu'on doit transmettre des valeurs autre qu'une simple chaîne de caractères comme dans mon cas, où je vais devoir créer un objet spécifique contenant les champs modifiés.

  9. #9
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    Oui en effet j'avais pas tout compris

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

Discussions similaires

  1. comment capter le signal de fin d'éxécution d'une commande ms-dos
    Par POKOU dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 03/12/2010, 18h28
  2. Réponses: 7
    Dernier message: 23/11/2010, 19h13
  3. Réponses: 1
    Dernier message: 25/05/2010, 18h21
  4. DXVA2 signalement de fin de décompression matérielle
    Par Rémi Coquet dans le forum DirectX
    Réponses: 0
    Dernier message: 15/03/2009, 00h17
  5. Réponses: 16
    Dernier message: 19/11/2007, 18h32

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