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:
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.