Not a problem with functionality, but I was reading the code to learn how you did delayed querying, and came across the following line in

    if (!isReadOnly() && isEditable()
        && (!event.<XEvent> cast().isSpecialKey() || kc == KeyCodes.KEY_BACKSPACE || kc == 46)) {
I had to spend a minute looking up that "46" is KeyCodes.KEY_DELETE. Seems a lot cleaner to use the named constant. Save somebody else that minute down the road...