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 :

Thread+JTextField


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut Thread+JTextField
    Bonjour,
    J'aimerais savoir si c'est possible de creer un thread qui permet de voir si un JTextField et vide ou non.
    Merci d'avance

  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
    Pourquoi faire compliqué quand on peut faire simple ? Mets un DocumentListener sur ton JTextField :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DocumentListener myListener = new DocumentListener() {....};
    JTextField myTextField = new JTextField();
    myTextField.getDocument().addDocumentListener(myListener);

  3. #3
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    J'ai réussi à le faire avec un thread ma ta solution me semble etre beaucoup plus simple.
    Quand je la met en place ca me met une erreur : Cant find symbol DocumentListener
    J ai regardé un peu sur la javadoc mais j'ai pas trop compris, en fait ca execute le code entre les accolade si le JTextField est modifié, c'est ca?

  4. #4
    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
    J'ai réussi à le faire avec un thread ma ta solution me semble etre beaucoup plus simple.
    Effectivement, c'est fait pour ça.
    Quand je la met en place ca me met une erreur : Cant find symbol DocumentListener
    import javax.swing.event.DocumentListener
    J ai regardé un peu sur la javadoc mais j'ai pas trop compris, en fait ca execute le code entre les accolade si le JTextField est modifié, c'est ca?
    DocumentListener est une interface, tu dois l'implémenter (code entre les accolades), c-à-d. définir les trois méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void insertUpdate(DocumentEvent e);
    public void removeUpdate(DocumentEvent e);
    public void changedUpdate(DocumentEvent e);
    Si du texte est inséré, la méthode insertUpdate est appelée, si du texte est supprimé, la méthode removeUpdate est appelée.

  5. #5
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    Donc si k'ai bien compris je dois faire ca:

    class CLASS extends JFrame implements DocumentListener{
    ...
    ...
    ..
    public CLASS (String titre){

    ...
    ...
    DocumentListener myListener = new DocumentListener() {

    public void insertUpdate(DocumentEvent e);
    public void removeUpdate(DocumentEvent e);
    public void changedUpdate(DocumentEvent e);

    };
    code.getDocument().addDocumentListener(myListener);
    }

    public void insertUpdate(DocumentEvent e){
    //là je met ce que je veux que ca fasse
    }

    public void removeUpdate(DocumentEvent e){
    //là je met ce que je veux que ca fasse
    }

    public void changedUpdate(DocumentEvent e){
    //là je met ce que je veux que ca fasse
    }

    }

  6. #6
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    "Code", c'est un JTextField,j avais oublié
    Mais ca me met encore plein d'erreurs, j ai pas du faire ce qu il fallait.

  7. #7
    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
    Plutôt qq chose comme ç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
    class Fenetre extends JFrame implements DocumentListener {
      public Fenetre(String titre) {
        ... 
        code.getDocument().addDocumentListener(this); 
      } 
     
      public void insertUpdate(DocumentEvent e){ 
        //là je met ce que je veux que ca fasse 
      } 
     
      public void removeUpdate(DocumentEvent e){ 
        //là je met ce que je veux que ca fasse 
      }
     
      public void changedUpdate(DocumentEvent e){ 
        //là je met ce que je veux que ca fasse 
      } 
    }

  8. #8
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    oki ca marche mais le seul probleme c'est que les methodes, par exemple insertUdapte, fonctionne caractere par caractere, c'est à dire que si je rentre "test", ca va faire 4 fois la methode.
    En tout cas merci de ton aide déjà

  9. #9
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    C'est bon j'ai trouvé un moyen.
    Vu que dans mon JText, ca va etre un code barre et que les codes barres contiennent exclusivement 13 caracteres, dans le Insert,je verifie le nombre de caractere avant de lancer quelquechose.
    Big merci et Bonne Année en avance

  10. #10
    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
    merci, bonne année aussi !

  11. #11
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    Me revoilà, j 'ai un autre probleme que je post ici car ca doit avoir un rapport avec ce que j'ai fait avant.
    La methode setText(null) me renvoie une erreur dans ma boite cmd.

    code:
    public void insertUpdate(DocumentEvent e){

    cara = (code.getText()).length(); //code=JTextField


    if(cara==13){

    Fiche_Code fiche = new Fiche_Code("Fiche",code.getText());
    code.setText(null);//c'est là que ca marche pas


    }

    }

    Donc aucun prob à la compilation mais à l'execution.....:
    Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Attempt
    to mutate in notification
    at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:134
    3)
    at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:662)
    at javax.swing.text.JTextComponent.setText(JTextComponent.java:1441)
    at player_game.insertUpdate(player_game.java:115)
    at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.j
    ava:184)

    ps: je n ai pas tout mis.

    Merci d'avance

  12. #12
    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
    Tu n'as pas le droit de modifier le Document source de l'événement dans les méthodes de notification, c'est ce qui se passe avec :
    Dans ce cas, le DocumentListener n'est pas forcément la meilleure solution... Soit tu crées une nouvelle classe héritée de PlainDocument et redéfinis la méthode insertString (éventuellement remove), soit tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (cara == 13) {
      Fiche_Code fiche = new Fiche_Code("Fiche", code.getText());
     
      SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          code.setText(null);
        }
      });
    }

  13. #13
    Membre éclairé Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Par défaut
    Bon bah voilà ca marche parfaitement ta deuxieme solution
    Mais peux tu m'expliquer pourquoi stp?
    Je suis pas trop calé en java, ca ressemble un peu à un thread nan?(methode run).

  14. #14
    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
    La méthode invokeLater() sert à différer un traitement une fois que tous les événements de la file d'attente EventQueue sont traités. Cette file maintient les événements souris, clavier, paint, ... en interaction avec l'IHM. L'événement fourni à invokeLater (en fait, un Runnable) est inséré en queue de file. Le thread en charge d'exécuter les événements de l'EventQueue (appelé Event Dispatch Thread) appelle simplement la méthode run() du Runnable fourni.

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

Discussions similaires

  1. [thread] Récupérer la valeur d'un JTextField
    Par _xme_ dans le forum Débuter
    Réponses: 0
    Dernier message: 27/09/2010, 10h08
  2. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  3. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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