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 :

[debutant] taper un texte à l'aide de JButton


Sujet :

Composants Java

  1. #1
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut [debutant] taper un texte à l'aide de JButton
    Bonjour,

    je dois ecrire un texte en appuyant successivement sur des jbuttons. chaque jbutton represente 3 lettres.
    exemple: si j'appuie une fois sur le bouton, ça ecrit "a"; 2 fois "b" ....
    ça j'y arrive. mais qd j'appuie sur un jbutton, ça ecrit "a" par exemple ds mon jtextarea. puis j'appuie sur un autre jbutton, "z" par exemple, et ça ecrit "z" à la place de "a". or moi, je voudrais que ça ecrive à la suite donc "az".

    et je ne sais pas comment faire.
    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //pour ecrire selon le nb d'appui, je fais:
    //ds mouseperformed
    if (e.getClickCount() == 1)
    jtextarea.setText("a");
    if (e.getClickCount() == 2)
    jtextarea.setText("b");

  2. #2
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    c'est un append qu'il faut faire et pas un setText

    la javadoc sur Internet est faite pour ça : pour apprendre

    http://java.sun.com/j2se/1.5.0/docs/api/index.html

  3. #3
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    ouais, je connaissais deja append et j'avais deja testé et ça fonctionne pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (e.getSource() == mon_bouton){
     if ((e.getClickCount())==1)
      jtextarea.append("a");
     if ((e.getClickCount())==2)
      jtextarea.append("b");
     if ((e.getClickCount())==3)
      jtextarea.append("c");
    }
    et ce code, ça ecrit:
    "a" si on clique 1 fois
    "ab" si on clique 2 fois
    "abc" si on clique 3 fois.

    or c pas ce que je veux. c pr ça que j'avais essayé avec les setText mais ça donne pas non plus ce que je veux.

    dc si qqn sait...
    merci

  4. #4
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    ba tu stockes le nombre de clics pour chaque JButton dans un tableau et à chaque clic tu fais un setText à partir du tableau

  5. #5
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Tu veux en fait que ca fasse un peu comme sur les telephones portables lorsque l'on ecris de SMS. Ca a pas l'air complique. Comme il t'es dit plus haut, tu dois stocker le nombre de cliques et seulement apres tu affiches la lettres. Pour ton exemple de code, c'est normal que ca t'affiches "abc" si tu cliques 3 fois car a chaque cliques, le listener declanche la methode correspondante. C'est du au fait que habituellement, le clique "multiple" est un effet de "plus" et non un effet different. Par exemple, sur ton bureau, un clique sur une icone la selectionne, un double clique la selectionne et l'ouvre.

    Pour toi, il faut que tu reflechisses differement, donc tu ne peux pas utiliser la fonction getCountClick. Il faut que tu traites chaque cliques comme un clique suplementaire et au bout d'un certain temps ( 1 seconde par exemple ), tu affiches le resultat suivant le nombre de clique qu'il y a eu. Un clique aura simplement pour effet d'incrementer une variable.

  6. #6
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Merci pour vos réponses.
    mais je n'arrive pas à comprendre. benratti pourquoi c'est normal que ca affiche "abc" si je clique 3 fois.
    car si je clique 1 fois, ça rentre ds le 1er if , ça doit ecrire "a" puis ça sort de la methode.
    si je clique 2 fois, ça rentre ds le 2eme if, et ça doit ecrire "b" puis ça sort de la methode.
    si je clique 3 fois, ça rentre ds le 3eme if, et ça doit ecrire "c" puis ça sort de la methode.
    je sais que c'est pas ce que ça fait mais je n'arrive pas à comprendre pourquoi.

    g qd meme essayé d'utiliser un compteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (e.getSource() == bouton){
     compteur = 0;
     compteur++;
    if (compteur == 1)
     jt.append("a");
    if (compteur == 2)
     jt.append("b");	
    if (compteur == 3)
     jt.append("c");
    }
    sauf qu'ici, et la je comprends, le compteur vaut tjs 1. dc ça n'ecrit que "a". car le compteur est reinitialisé à 0. si je fais pas cette reinitialisation, le compteur s'incremente, et vaut 1,2,3,4... donc qd il vaut plus de 3, ça n'ecrit plus rien.

    je comprends pas non plus pourquoi ne pas utiliser getclickcount() car c'est cette methode qui me dit combien de fois l'utilisateur a appuyé ?

    voila, j'ai pas bien compris comment stocker le nb de clics.
    si vous pouviez me réexpliquer...

  7. #7
    Membre régulier Avatar de calypso
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 102
    Points : 100
    Points
    100
    Par défaut
    Et bien si tu cliques 3 fois, il va envoyer trois messages:

    Si tu cliques 3 fois, c'est que tu as commence par cliquer une fois donc il appelle le listener avec 1 click
    Pareil pour deux, puis pour trois

    Finallement, si tu cliques trois fois, c'est que tu as clique une fois et que tu as clique 2 fois et enfi que tu as clique 3 fois (je me demande si je suis claire?!)

    Pour ton probleme, il faut que tu recupere uniquement le troisieme evenement..

  8. #8
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    bonjour tout le monde!
    eh bien, ça fait une semaine que j'essaye et je n'y arrive toujours pas...
    alors si qqn avait un petit bout de code a me proposer, ce serait tres sympa.
    merci

  9. #9
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Bon, j'ai pourtant l'impression que l'on a ete assez clair : lors d'un tripple clic, tu cliques par definition trois fois, a chacun de ces clics, le listener est lance.

    Je ne connais pas vraiment le fonctionnement des Timer, mais a mon avis, tu dois t'en servir.

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    import java.util.Timer ;
    import java.util.TimerTask ;
    import java.awt.event.MouseAdapter ;
    import java.awt.event.MouseEvent ;
     
    public class  DrippleClicListener extends MouveAdapter
    {
          private int _nbClic ;
     
          public void mouseClicked( MouseEvent e)
          {
                Timer timer ;
     
                switch(e.getClickCount()){
                case 1 :  _nbClic = 0 ;
                             timer = new Timer() ;
                             timer.schedule(new ClickTask(this), 1000) ;
                             break ;
                default : _nbClic = (_nbClic + 1) % 3 ;
                // Si tu cliques plus de trois fois, tu reviens a "a"
                }
     
          }
     
          public int getNbClick()
          {
               return _nbClic ;
           }
    }
     
     
    class ClickTask extends TimerTask
    {
            DrippleClicListener _listener ;
     
            public ClickTask(DrippleClicListener listener)
            {
                 super() ;
                 _listener = listener ;
            }
     
            public void run()
            {
                  int nb ;
                  nb = _listener.getNbClic() ;
                  switch(nb){
                  case 0 : System.out.println("a") ; 
                               break ;
                  case 1 : System.out.println("b") ;
                               break ;
                  case 2 : System.out.println("c") ; 
                               break ;
                 }
            }
     
    }
    Bon, j'ai fait ce bout de code en live, donc il y a peu de chance qu'il marche direct, mais le principal, c'est que tu t'en inspire pour l'adapter a ton cas. Tu peux par exemple envoyer le resultat affiche en fonction de la source pour eviter de te taper plein de fois la meme classe. Bon courage.

  10. #10
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    slt,
    j'ai testé ton code apres l'avoir adapté. il fonctionne. je n'aurais jamais trouvé moi-meme car je ne connaissais pas les timers. c'est pas évident qd on débute de savoir que telle ou telle classe existe et qu'elle sert à telle chose. alors merci beaucoup.

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

Discussions similaires

  1. Aide Debutant, lecture fichier texte
    Par Azzuri dans le forum Général Python
    Réponses: 5
    Dernier message: 01/12/2008, 19h37
  2. [debutant] afficher un texte
    Par nadhem dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 27/07/2006, 13h10
  3. [debutant][tokenizer] un peu d'aide
    Par stepdez dans le forum Langage
    Réponses: 1
    Dernier message: 26/04/2006, 18h08
  4. Réponses: 5
    Dernier message: 15/02/2006, 11h27
  5. [Tableaux] Taper du texte sous DOS.
    Par kult dans le forum Langage
    Réponses: 16
    Dernier message: 17/11/2005, 15h06

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