Pregunta

Yo uso la biblioteca GWT-Ext para la construcción de interfaz gráfica de usuario para una aplicación web. Me gustaría procesar una pulsación de tecla ENTER en el interior de la NumberField.

Debe ser como la siguiente:

    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);

Sin embargo, el código no hace nada! ¿Qué estoy haciendo mal? En términos generales, ¿cuál es la mejor manera de agregar un controlador tal que el campo?

¿Fue útil?

Solución

OK, resuelto que en el último. Hay otra función de devolución de llamada en el interior de KeyListener - componentKeyPress en lugar de keyPressed. Este es el código correcto:

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

    };
    requiredHeight.addKeyListener(listener);

Otros consejos

Algunos métodos están en desuso, lo uso en mi siguiente código sencillo formulario de acceso:

    KeyDownHandler handler = new KeyDownHandler() {

        @Override
        public void onKeyDown(KeyDownEvent event) {
            if (event.getNativeKeyCode() == 13) {
                btnLogin.click(); 
            }
        }
    };
    tbLogin.addKeyDownHandler(handler);
    tbPassword.addKeyDownHandler(handler);

El registro de un detector de teclas, de hecho, se registra al oyente a 3 eventos diferentes:.-Clave arriba, Tecla abajo y pulsación de tecla, dos de los cuales son completamente inútiles en su caso

Una solución más compacta sería el uso de un oyente genérico, como sigue:
(Con perdón para el uso de una clase de escucha anónima, es más rápido aún, evidentemente, tiene el mismo efecto)

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());           
    }
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top