JDK-4051910 : Win32: Incorrect KeyPressed/Released event generated with input from non-101 Key
  • Type: Bug
  • Component: client-libs
  • Sub-Component: java.awt
  • Affected Version: 1.1.3
  • Priority: P1
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 1997-05-14
  • Updated: 1997-09-30
  • Resolved: 1997-09-30
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
1.1.4 1.1.4Fixed
Related Reports
Relates :  
Description
AWT component receives an incorrect char code on KeyPressed/Released event
from inputs made by 106 keyboard which is one of Japanese keyboard type.

Char code in KeyTyped event is correct though.

Try the following example to reproduce:

public class KeyEvents extends Applet implements java.awt.event.KeyListener, java.awt.event.MouseListener
{
        java.awt.TextArea area;
        java.awt.Canvas   canvas;
        public KeyEvents()
        {
        }
        public void init()
        {
                resize(320, 240);
                this.setLayout(new java.awt.GridLayout(2,1));
                this.area   = new java.awt.TextArea();
                this.canvas = new java.awt.Canvas();
                this.add(area);
                this.add(canvas);
                this.canvas.addKeyListener(this);
                this.canvas.addMouseListener(this);
        }
        public void keyPressed(java.awt.event.KeyEvent event)
        {
                String message;
                message=""+event;
                System.out.println(message);
                this.area.append(message+"  \n");
        }
        public void keyReleased(java.awt.event.KeyEvent event)
        {
                String message;
                message=""+event;
                System.out.println(message);
                this.area.append(message+"  \n");
        }
        public void keyTyped(java.awt.event.KeyEvent event)
        {
                String message;
                message=""+event;
                System.out.println(message);
                this.area.append(message+"  \n");
        }
        public void mouseClicked(java.awt.event.MouseEvent event)
        {
        }
        public void mouseEntered(java.awt.event.MouseEvent event)
        {
        }
        public void mouseExited(java.awt.event.MouseEvent event)
        {
        }
        public void mousePressed(java.awt.event.MouseEvent event)
        {
                this.canvas.requestFocus();
        }
        public void mouseReleased(java.awt.event.MouseEvent event)
        {
        }

}

Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: 1.1.4 FIXED IN: 1.1.4 INTEGRATED IN: 1.1.4 VERIFIED IN: 1.1.4
14-06-2004

EVALUATION Related to all the other keyboard problems in awt_Component.cpp. Will avoid using hardcoded tables to convert virtual key codes to characters. [joconner 7/3/97] I didn't use the suggested test, but I wrote another sample application that echoed keytyped, keypressed, and keyreleased events to the console. It appears to work. Could you be more specific as to what characters you were typing and what your expectations were. I typed "kanji". I got keypressed and keyrelease events for "k", "a", "n", "j", and "i" and keytyped events for the kanji for "kan" and "ji". This is expected. Also, I tested the "2" key. and Shift "2" produced a quote ("). This is also expected with the fix.
11-06-2004

SUGGESTED FIX (src/win32/sun/windows/awt_Component.cpp) l.1049-1071 < switch (jkey) { < case '`': jkey = '~'; break; < case '1': jkey = '!'; break; < case '2': jkey = '@'; break; < case '3': jkey = '#'; break; < case '4': jkey = '$'; break; < case '5': jkey = '%'; break; < case '6': jkey = '^'; break; < case '7': jkey = '&'; break; < case '8': jkey = '*'; break; < case '9': jkey = '('; break; < case '0': jkey = ')'; break; < case '-': jkey = '_'; break; < case '=': jkey = '+'; break; < case '\\': jkey = '|'; break; < case '[': jkey = '{'; break; < case ']': jkey = '}'; break; < case ';': jkey = ':'; break; < case '\'': jkey = '"'; break; < case ',': jkey = '<'; break; < case '.': jkey = '>'; break; < case '/': jkey = '?'; break; < } --- > ToAscii( wkey, VK_SHIFT, keyState, (LPWORD)&jkey, FALSE );
11-06-2004