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

Interfaces Graphiques en Java Discussion :

KeyListener et combinaisons accentuées de touches


Sujet :

Interfaces Graphiques en Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut KeyListener et combinaisons accentuées de touches
    Bonjour à tous.
    Je suis en train de recréer un composant à la swing ( le problème n'est cependant pas relatif à swing car mon composant est dans sa propre architecture, hors de swing, d'où le forum où je poste ) consistant en un TextField.

    Je bloque à un niveau : la gestion des combinaisons de touches relativement aux caractères accentués.

    ---

    Si je veux écrire é, il y a une touche pour ça.
    Il me suffit d'appuyer sur é et de le récupérer via KeyEvent.getKeyChar() ...

    De même pour d'autres cas comme èéüäöà.
    Mon problème se situe au niveau d'autres caractères tels que :

    êôâîû ou les majuscules ÀÈÌÒÙ ÂÊÎÔÛ
    Les caractère ^ et ` sont repérés comme des caractères et donc directement envoyé via getKeyChar().
    Y a-t-il un moyen pour gérer tous les cas présents et afficher les combinaisons simplement ?

    Edit :
    voici ce que je fais actuellement, sans savoir comment bien combiner les cas :

    Code java : 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
    58
    59
    60
    61
    62
    63
         /**
         * {@inheritDoc}
         */
        public void keyDown(KeyEvent event) {
            if(!isEditable())
                return;
            switch(event.getKeyCode()){
                case VK_ENTER:
                    submit();
                    break;
                case VK_UP:
                case VK_KP_UP:
                    goLast();
                    break;
                case VK_DOWN:
                case VK_KP_DOWN:
                    goNext();
                    break;
                case VK_RIGHT:
                case VK_KP_RIGHT:
                    goRight();
                    break;
                case VK_LEFT:
                case VK_KP_LEFT:
                    goLeft();
                    break;
                case VK_BACK_SPACE:
                    erase();
                    break;
                default:
                    char c = event.getKeyChar();
                    // traitement des accents
                    switch(c){
                        case '^':
                        case '`':
                        case '´':
                        case '~':
                        case '¨':
                            if(memoryChar == null)
                                memoryChar = new Character(c);
                            else{
                                addChar(memoryChar.charValue());
                                addChar(c);
                                memoryChar = null;
                            }
                            return;
                    }
     
                    if(c != CHAR_UNDEFINED && !event.isActionKey()){
                        if(memoryChar == null)
                            addChar(c);
                        else{
                            memoryChar = null;
                            return; // il faudrait faire une combinaison du caractère
                        }
                    }
            }
        }
     
        /**
         * Caractère accentué en mémoire
         */
        private Character memoryChar = null;

    La partie default : du switch traite des caractères entrés.
    Ce qu'il manque, c'est de trouver comment faire des combinaisons des accents avec les caractères non-accents.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Bon, bas j'ai trouvé la planche unicode affichant les divers cas que je cherche :
    http://www.unicode.org/charts/PDF/U0080.pdf

    le problème, c'est de trouvé la meilleur moyen de créer les combinaison

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Bon finalement j'ai trouvé, le problème est autre : j'utilise l'écoute sur keyDown.
    En utilisant l'écoute avec keyTyped, tout fonctionne impécablement, les valeurs renvoyées par getKeyChar sont correctes et prennent en compte tout ce dont j'ai besoin.

    Bizarre que ça ne marche qu'avec keyTyped et pas keyDown et keyUp

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par xion luhnis
    Bizarre que ça ne marche qu'avec keyTyped et pas keyDown et keyUp
    keyDown indique que la touche est pressée, keyUp indique que la touche est lachée
    il est donc normal qu'ils envoient plus d'évènements que keyTyped
    Je pense que la javadoc doit l'expliquer.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/10/2014, 09h40
  2. [AC-2007] Combinaison de plusieurs touches
    Par gerarddurand dans le forum VBA Access
    Réponses: 9
    Dernier message: 05/02/2013, 13h27
  3. Détection d'une seule touche clavier (ou combinaison de 2 touches)
    Par budhax dans le forum Bibliothèques tierces
    Réponses: 2
    Dernier message: 28/07/2007, 08h31
  4. Detecter une combinaison de 3 touches
    Par barucca dans le forum Delphi
    Réponses: 18
    Dernier message: 20/09/2006, 16h34
  5. passer une combinaison de trois touche ctrl+alt+w à mon micr
    Par marco62118 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 09/11/2005, 19h43

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