Как открыть VirtualKeyboard, связанный с TextField, когда поле редактируется? - PullRequest
1 голос
/ 21 октября 2011

Я инициализировал VKBImplementationFactory в startApp():

public void startApp() {
        VKBImplementationFactory.init();
        Display.init(this);
        new MenuPrincipalForm(this).show();
    }

Я также создал VirtualKeyboard в форме:

...
private VirtualKeyboard vkNombre = new VirtualKeyboard();
...
vkNombre.setInputModeOrder(new String[]{VirtualKeyboard.NUMBERS_SYMBOLS_MODE});

И я привязал эту VirtualKeyboard к TextField:

cintxt=new TextField();
VirtualKeyboard.bindVirtualKeyboard(cintxt, vkNombre);

Я зарегистрировал dataChangeListener в этом текстовом поле:

public class ModifierFicheClient extends Form implements ActionListener, DataChangedListener 
{
  ...
  cintxt.addDataChangeListener(this);
  ...
}

В методе dataChanged(int type, int index) я хочу открыть vkNombre VirtualKeyBoard. Я знаю, что при нажатии TextField автоматически отображается VirtualKeyboard. Но есть случай, когда вы переходите к TextField с помощью программных кнопок прокрутки мобильного телефона, тогда я могу перейти к TextField, не нажимая его, и я могу печатать любые буквы! Так как же позвонить на VirtualKeyboard при наборе буквы на телефон моб?

Примечание: я написал System.out.println("zzzz"); в методе dataChanged(int type, int index), а вывод пишет две строки "zzzz", когда я набираю one character! Так почему метод dataChanged называется two times, когда я набираю только одну букву?

1 Ответ

1 голос
/ 21 октября 2011

Не нужно использовать VKBImplementationFactory.init(); в startApp(). Потому что LWUIT автоматически определяет, является ли этот мобильный телефон сенсорным экраном или нет. И числовое ограничение не работает на VKB при использовании LWUIT 1.5 или более ранних версий. Это ошибка в этих версиях. Но это будет исправлено в текущей версии репозитория LWUIT (Редакция: 1605). Таким образом, вы можете извлекать из хранилища и использовать последнюю банку LWUIT.

Обновление:

См. Пример кода для отображения VKB при фокусировке на TextField,

TextField textField = new TextField();
final VirtualKeyboard keyboard = new VirtualKeyboard();
textField.addFocusListener(new FocusListener() {

     public void focusGained(Component cmp) 
          keyboard.show();
     }
     public void focusLost(Component cmp) {
          keyboard.dispose();
     }
});
keyboard.setTextField(textField);
...