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
| /**
* Evenement declenché quand l'utilisateur ecrit dans le JTextArea
* @param e
*/
@Override
public void insertUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
//On arrête l'execution de l'evenement si l'utilisateur fait un copier/coller
if (e.getLength() != 1) {
return;
}
//On recupère la position du dernier caractère saisi en comptant de 0
int pos = e.getOffset();
String content = null;
try {
//on recupère ce qu'a saisi l'utilisateur jusqu'à present
content = EqArea.getText(0, pos + 1);
System.out.print("\nCONTENT : "+ content );
}catch (BadLocationException er) {
er.printStackTrace();
}
//Find where the word starts
int w;
for (w = pos; w >= 0; w--) {
if (! Character.isLetter(content.charAt(w))) {
break;
}
}
if (pos - w < 2) {
// Too few chars
return;
}
String prefix = content.substring(w + 1);
System.out.print("\nPREFIX : "+ prefix );
//On fait une recherche sur la chaine qu'à saisi l'utilisateur dans les données de l'autocompletion
//La methode binarySearch retourne :
//- soit l'index de l'élément cherché s'il est contenu dans la collection
//- soit le nombre d'élement de la collection si tous les elements sont inferieur à l'élément que l'on cherche
//- soit un entier négatif qui représente l'index de permier élément superieur de l'élément qu'on cherche
//prefix = String.compareToIgnoreCase(prefix);
int index = Collections.binarySearch(dictionnary, prefix);
System.out.printf("\nINDEX : " + index);
if (index < 0 && -index <= dictionnary.size()) {
String match = dictionnary.get(-index - 1);
//Completion trouvé --> On recupère le premier element supérieur à la chaine recherché.
//Le signe "-" retourne la valeur absolue de la variable index
System.out.printf("\nMATCH : " + match);
}
} |
Partager