1. Я бы использовал KeyPressHandler вместо Up / Down обработчик.
Насколько я понимаю, вам больше интересно узнать, что набрал пользователь, а не ту клавишу, которая была фактически нажата на клавиатуре. Кроме того, вы можете использовать Character.isDigit (c) и Character.isLetter (c) , поскольку KeyPressEvent.getCharCode () вернет символ ( c ).
2. Скорее всего, вы хотите проверить длину текста в какой-то момент (например, когда пользователь нажимает Введите ), затем
// handler block
if (c == KeyCodes.KEY_ENTER) {
int length = ((SuggestBox) event.getSource()).getText().length();
// take an action depending on length
}
// handler block continued
должно соответствовать.
3. См. [1] и, возможно, это зависит от браузера.
Редактировать: [1], [2] и [3] вместе (используя KeyUpHandler ):
private static final int THREASHOLD = 2;
private String phrase = "";
...
searchBox.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
String text = ((SuggestBox) event.getSource()).getText();
if (!phrase.equals(text)) {
if (text.length() >= THREASHOLD) {
boolean alphanum = true;
for (int i = 0; i < THREASHOLD; i++) {
char c = text.charAt(i);
if (!Character.isDigit(c) && !Character.isLetter(c)) {
alphanum = false;
break;
}
}
if (alphanum) {
//RPC (won't be called twice)
}
}
phrase = text;
}
}
});