[SWT] CCombo dynamique pour la saisie aisée des données
Bonjour,
Dans une application java/swt, j'ai des CCombo et je voudrais rendre la saisie des données moins fastidieuse pour l'utilisateur en déroulant la Ccombo et en positionnant au fur et à mesure la surbrillance sur l'item le plus proche du text qu'il saisit, lui permettant de valider la proposition avec la touche entrée et sélectionner l'item.
J'ai utilisé un Keylistener dans lequel je déroule la liste et recherche l'item approprié. Celà se passe bien, sauf que le text de la CCombo est remplacé immédiatement par l'item sélectionné, et que le curseur n'y reste pas pour permettre de continuer la saisie. Il ne me semble pas très efficace d'utiliser un seul caractère pour la recherche de l'item correspondant.
Je ne sais pas si j'arrive à me faire comprendre, mais voici le code de mon keylistener :
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
|
natureCcmb.addKeyListener(new KeyAdapter(){
int index = -1;
public void keyReleased(KeyEvent e) {
String text = natureCcmb.getText();
String[] items = natureCcmb.getItems();
if(e.character == SWT.CR) {
if(index >= 0) natureCcmb.setText(natureCcmb.getItem(index));
else natureCcmb.setText("");
natureCcmb.setListVisible(false);
}else{
natureCcmb.setListVisible(true);
int i = 0;
boolean found = false;
while((!found)&&(i < items.length)){
found = items[i].toLowerCase().startsWith(text.toLowerCase());
if(found) index = i;
i++;
}
if(index >= 0) natureCcmb.select(index);
natureCcmb.setText(text);
//natureCcmb.setFocus();
}
}
}); |
Quelqu'un saurait-il quoi faire ?
Merci d'avance
CCombo dynamique pour la saisie aisé des données
Bonjour,
Merci soft0613 pour l'intérêt porté à ma requête. La méthode setFocus ne résout pas mon problème, l'item sélectionné précedemment est désélectionné (il reste quand même encadré, mais en pointillés plutôt qu'en surbrillance).
La méthode forceFocus quand à elle ferme carrément la liste des items qui était déroulée.
J'ai aussi essayé la méthode getChildren afin de récupérer le champ texte et lui appliquer directement le setFocus, mais je pense qu'elle ne retourne rien comme children, car toute tentative du genre getChildren()[0] me génère une exception ArrayIndexOutofBounds.
Pour replacer le curseur, l'instruction
Code:
natureCcmb.setSelection(new Point(0, text.length()));
se contente de mettre en surbrillance le contenu du champ texte, pas de curseur pour continuer la saisie.
J'ai pourtant assez souvent vu ça dans des programmes (surtout sur le web : google, youtube,...) je pensais que ce serait facile. SWT serait-il insuffisant ? L'idée de reécrire un widget me fait un peu peur, je ne suis pas une experte java, loin de là. Je ne sais comment faire.
Aidez-moi svp