The general rule is that keyPress is for "printable chars", while
keyDown and keyUp also receive "other keys", so your KEY_* chacks
should belong to onKeyDown or onKeyUp.
This however is not that simple:
http://www.quirksmode.org/js/keys.html
GWT uses "event.which || event.keyCode || -1" in all cases, and this
might be your problem here!
http://developer.mozilla.org/en/docs/DOM:event.which
IIUC, event.which will be the charCode if the key maps to a character
(and only in keyPress), or keyCode otherwise. So checking for the
KEY_* in onKeyDown or onKeyUp should catch the DELETE key.
But it might not solve your problem, as some browsers (firefox?) will
pass the KEY_DELETE to keyPress, in which case event.which will equal
the event.keyCode (46 here, which happens to also be the
event.charCode for a dot). In brief: you could allow "." but disallow
DELETE easily, but not the other way around (I'd be happy to be wrong
here!)
I'd have guessed onKeyPressed is passed the charCode (with a fall back
to keyCode for IE) and onKeyDown/Up the keyCode, but it's not the
case...
If I were you, I'd try using DOM.eventGetCurrentEvent() and JSNI to
access charCode and keyCode; and eventually fill in an issue for
onKeyPressed to receive charCode instead of keyCode; or at least try
to behave (almost) consistently across browsers, and if possible
follow the DOM.