ok great, so at least we know now that the keyboard fails due to focus not being available. So the bug is that the Display is not getting focus when it is clicked.
We had the same/similar issue with Linux and Keyboard input with lwjgl applets a while back but since we can test it easily (i use Linux) we were able to fix it (see last patch to LinuxDisplay).
Display.setParent() essentially just slaps a native Display on top of a canvas, so when you click the Display it knows that it has focus and grabs the keyboard. So as you have observed Canvas.hasFocus() is under the Display and doesn't get focus, if the Canvas does get focus it transfers it too the Display hence loosing focus itself (since only one thing can get focus at a time, either the Canvas or the Display).
Now I'm guessing that this is a similar bug to the one on linux, focus was being lost as soon as Display was clicked.
Next we need to know if Display ever gets focus, if you can output a
System.out.println("DISPLAY HAS FOCUS : " + Display.isActive() + " Canvas has Focus " + canvas.hasFocus());
every frame, then click the applet and check console if the Display ever returns true? (even if its only for 1 frame)
this'll hopefully narrow down the things that might be going wrong.
p.s. your applets works very nicely here on linux including keyboard input.