Обрабатывать обратный вызов для клавиши ENTER в NumberField GWT-Ext - PullRequest
0 голосов
/ 10 октября 2009

Я использую библиотеку GWT-Ext для создания GUI для веб-приложения. Я хочу обработать нажатие клавиши ВВОД внутри NumberField.

Должно быть так:

    final NumberField requiredHeight = new NumberField();
    requiredHeight.setValue(125);
    requiredHeight.setAllowBlank(false);
    requiredHeight.setAllowNegative(false);
    requiredHeight.setAllowDecimals(false);
    KeyListener listener = new KeyListener() {

        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode()==13)
                addPortlet(requiredHeight.getValue().intValue());
        }

    };
    requiredHeight.addKeyListener(listener);

Но код ничего не делает! Что я делаю неправильно? Вообще говоря, как лучше всего добавить такой обработчик в поле?

Ответы [ 3 ]

4 голосов
/ 13 октября 2009

ОК, наконец-то решил. Внутри KeyListener есть другая функция обратного вызова - componentKeyPress вместо keyPressed. Это правильный код:

    KeyListener listener = new KeyListener() {
        @Override
        public void componentKeyPress(ComponentEvent event) {
            if(event.getKeyCode()==13)
            {
                addPortlet(requiredHeight.getValue().intValue());
            }
            super.componentKeyPress(event);
        }

    };
    requiredHeight.addKeyListener(listener);
1 голос
/ 13 марта 2015

Некоторые методы устарели, я использую следующий код в моей простой форме входа в систему:

    KeyDownHandler handler = new KeyDownHandler() {

        @Override
        public void onKeyDown(KeyDownEvent event) {
            if (event.getNativeKeyCode() == 13) {
                btnLogin.click(); 
            }
        }
    };
    tbLogin.addKeyDownHandler(handler);
    tbPassword.addKeyDownHandler(handler);
0 голосов
/ 01 мая 2013

Регистрация ключевого слушателя фактически регистрирует слушателя на 3 различных события: нажатие клавиши вверх, нажатие клавиши и нажатие клавиши, два из которых абсолютно бесполезны в вашем случае.

Более компактным решением было бы использование универсального слушателя следующим образом:
(простите за использование анонимного класса слушателя, он быстрее, но, очевидно, имеет тот же эффект)

import com.extjs.gxt.ui.client.event.Events; 

requiredHeight.addListener(Events.OnKeyPress, new Listener<ComponentEvent>() {
    @Override
    public void handleEvent(ComponentEvent e) {
        if (e.getKeyCode()==13)
            addPortlet(requiredHeight.getValue().intValue());           
    }
});
...