como una solución general, lo que funciona para mí (gracias a Gal-berajá comentario):
En general, GWT no tiene clases para manejar evento de entrada (que se describe here y here) . Así que tenemos que ponerlo en práctica por nosotros mismos:
clase
Handler: Clase
import com.google.gwt.event.shared.EventHandler;
public interface InputHandler extends EventHandler {
void onInput(InputEvent event);
}
Evento:
import com.google.gwt.event.dom.client.DomEvent;
public class InputEvent extends DomEvent<InputHandler> {
private static final Type<InputHandler> TYPE = new Type<InputHandler>("input", new InputEvent());
public static Type<InputHandler> getType() {
return TYPE;
}
protected InputEvent() {
}
@Override
public final Type<InputHandler> getAssociatedType() {
return TYPE;
}
@Override
protected void dispatch(InputHandler handler) {
handler.onInput(this);
}
}
Uso:
box.addDomHandler(new InputHandler() {
@Override
public void onInput(InputEvent event) {
text.setText(box.getText());
}
},InputEvent.getType());
Funciona en cada cambio de valor de cuadro de texto que incluye pegar usando el menú contextual. No reacciona con flechas, ctrl, shift, etc ...
Gracias. Esto funcionó para mí. Una cosa que los demás deben tener en cuenta es que se requiere el comando diferido porque el TextBox aún no contiene el texto de interés cuando se maneja el evento pegar. Si está intentando filtrar el contenido del cuadro de texto (en mi caso, para caracteres válidos), tenga en cuenta que un usuario verá momentáneamente el texto pegado. Alguien sabe alguna forma de evitar esto? Según lo que he leído, FF no permite la inspección del portapapeles, ¿pero IE y Webkit sí? – ShabbyDoo
Lo que podría hacer es ocultar el contenido de 'TextBox' hasta que se complete la validación. Es realmente un truco, pero 'color: transparent' haría el truco ... – z00bs
@ z00bs ¿Es esto posible sin extender TextArea y usar UiBinder? – alexandroid