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.