Come una soluzione generale, ciò che funziona per me (thx a Gal-Bracha commento):
In generale, GWT non ha classi per gestire eventi di input (descritto here e here) . Quindi abbiamo bisogno per la sua attuazione da noi stessi:
Handler classe: class
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);
}
}
Usage:
box.addDomHandler(new InputHandler() {
@Override
public void onInput(InputEvent event) {
text.setText(box.getText());
}
},InputEvent.getType());
Funziona su ogni modifica del valore TextBox compreso incollare utilizzando il menu di scelta rapida. Non reagisce su frecce, ctrl, shift ecc ...
Grazie. Questo ha funzionato per me. Una cosa che gli altri possono notare è che il comando posticipato è richiesto perché il TextBox non contiene ancora il testo di interesse quando viene gestito l'evento paste. Se si sta tentando di filtrare il contenuto della casella di testo (nel mio caso, per i caratteri validi), si noti che un utente vedrà momentaneamente il testo incollato. Qualcuno conosce qualche modo per aggirare questo? Da quello che ho letto, FF non consente l'ispezione degli appunti, ma sia IE che Webkit lo fanno? – ShabbyDoo
Quello che si potrebbe fare è nascondere il contenuto di 'TextBox' fino a quando non viene effettuata la convalida. È davvero un trucco ma 'color: transparent' farebbe il trucco ... – z00bs
@ z00bs È possibile fare a meno di estendere TextArea e usare UiBinder? – alexandroid