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 :

Equivalent de onChange pour un TextField


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Par défaut Equivalent de onChange pour un TextField
    Bonjour,
    Je me convertit à SWing aprés être passé parVisual C++ et Delphi.
    Etant un ancien adepte des programation à interface graphique ou il suffisatit de choisir à partir du menu l'action désirée pour aprés taper le code, je suis un peu perdu avec Swing.

    Je cherche à effectuer une action lorsque un JtextField est modifié.
    Aprés quelques recherches j'ai trouvé l'interface DocumentListener, mais le pb c'est qu'avec l'élément document je ne récupére que le text et je n'arrive pas à faire le lien avec le JtextField asssocié vu qu'il n'y a pas de méthode getsource comme pour ActionListener.

    ps : existe-t-il comme sur visual un champ ID pour chaque component ?

    merci d'avance pour votre aide.

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Bonjour,
    Citation Envoyé par gourouman
    Je cherche à effectuer une action lorsque un JtextField est modifié.
    Aprés quelques recherches j'ai trouvé l'interface DocumentListener, mais le pb c'est qu'avec l'élément document je ne récupére que le text et je n'arrive pas à faire le lien avec le JtextField asssocié vu qu'il n'y a pas de méthode getsource comme pour ActionListener.
    Non, il n'y a pas de méthode getSource() mais tu peux passer la référence de ton JTextField au DocumentListener ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class MyDocumentListener implements DocumentListener {
      private Component component;
     
      public MyDocumentListener(Component component) {
        this.component = component;
      }
     
      public Component getSource() {
        return component;
      }
    }
    et pour l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JTextField tf = new JTextField(...);
    MyDocumentListener dl = new MyDocumentListener(tf);
    tf.addDocumentListener(dl);
    Citation Envoyé par gourouman
    ps : existe-t-il comme sur visual un champ ID pour chaque component ?
    Non, il n'existe pas un tel champ pour chaque composant. La référence du composant suffit à l'identifier sans ambiguité.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Par défaut
    Citation Envoyé par herve91
    Bonjour,

    Non, il n'y a pas de méthode getSource() mais tu peux passer la référence de ton JTextField au DocumentListener ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class MyDocumentListener implements DocumentListener {
      private Component component;
     
      public MyDocumentListener(Component component) {
        this.component = component;
      }
     
      public Component getSource() {
        return component;
      }
    }
    et pour l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JTextField tf = new JTextField(...);
    MyDocumentListener dl = new MyDocumentListener(tf);
    tf.addDocumentListener(dl);
    Merci de la réponse,
    je tiens juste à préciser une chose :
    on ne peux pas faire tf.addDocumentListener(dl);
    mais par contre tf.getDocument().addDocumentListener(dl);

    J'ai finalement décidé de créer mon propre Jtextfield qui implémente DocumentListener, est-ce une modélisation correcte ?


    Citation Envoyé par herve91
    Non, il n'existe pas un tel champ pour chaque composant. La référence du composant suffit à l'identifier sans ambiguité.
    Sachant que j'ai une classe C qui crée dynamiquement X myJtextField et à chaque modification de ces champs, les myJtextField mettent à jour un tableau appartenant à la classe C.
    Dans myJtextField j'ai donc rajouté un champ pour les identifier et un champ classe C.
    Est-ce qu'il y a une meilleure méthode ?

    encore merci

  4. #4
    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
    Eventuellement pour différencier les objets tu dois pouvoir passer par luer méthode hashCode() qui est sencé renvoyer un résultat unique...

    Sinon pour ton implémetation du DocumentListener dans le JTextField, je je ne vois pas à redire...

  5. #5
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    on ne peux pas faire tf.addDocumentListener(dl);
    mais par contre tf.getDocument().addDocumentListener(dl);
    Oui, j'ai répondu un peu trop vite...
    J'ai finalement décidé de créer mon propre Jtextfield qui implémente DocumentListener, est-ce une modélisation correcte ?
    Pourquoi pas, mais l'ajout de responsabilités comme je t'ai proposé est plus facilement réutilisable et extensible que de faire une classe héritée.

    Sachant que j'ai une classe C qui crée dynamiquement X myJtextField et à chaque modification de ces champs, les myJtextField mettent à jour un tableau appartenant à la classe C.
    Dans myJtextField j'ai donc rajouté un champ pour les identifier et un champ classe C.
    Est-ce qu'il y a une meilleure méthode ?
    encore merci
    Ce serait mieux d'avoir un peu de code...
    Je dirais que les seules références vers les myJtextField devraient suffire. Un tableau de myJtextField dans la classe C ?

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Par défaut
    dans la classe C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for(int i=0 ;i<9 ;i++) {
      panelSousGrille.setLayout(new GridLayout(3,3));
      panelSousGrille.setBorder(BorderFactory.createLineBorder(Color.BLACK));
      myJTextField mjtf = new myJTextField(1,this,(byte)i,);
      mjtf.getDocument().addDocumentListener(mjtf);
      panelSousGrille.add(mjtf);
    }
    dans la classe myJtextField j'ai donc un champ classe C et un id qui me permettent de faire des appels pour modifier des champs de C lors d'une modification d'un myJTextField.

    Effectivement faire un tableau de myJtextField est une bonne idée, je pourrais même utiliser panelSousGrille.getComponents() pour rechercher le component modifié non ?

Discussions similaires

  1. [XSD] Equivalent du <choice> pour les attribut
    Par BigOne55 dans le forum Valider
    Réponses: 6
    Dernier message: 14/03/2014, 19h24
  2. Equivalent setAttribute(onchange,. . .) pour IE
    Par camcam8782 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/03/2009, 17h57
  3. [C#]Equivalent de SaveFileDialog pour webform
    Par Giill dans le forum ASP.NET
    Réponses: 4
    Dernier message: 05/04/2007, 09h43
  4. Equivalent à JML / JUnit pour le C++
    Par meuns dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 09/12/2004, 15h16
  5. equivalent SELECT DISTINCT pour MyBase?
    Par chrisou31 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 19h33

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