Duplicate :
|
|
Relates :
|
|
Relates :
|
Name: boT120536 Date: 08/10/2001 java version "1.3.1" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24) Java HotSpot(TM) Client VM (build 1.3.1-b24 mixed mode) I use Solaris 8, CDE Window Manager and Java SDK 2 v1.3.1. The keyboard is a Sun type 6 USB keyboard. The keyboard layout is modified through xmodmaprc as follows (to mime Hungarian keyboard layout in order to access hunarian accented characters via one key press (remapped pairs: a'-;, e'-', i'-`, o'-=, o:-0, o"- [, u'-], u:--, u"-\)): keycode 59= 0xe1 0xc1 0x27 0x22 keycode 58= 0xe9 0xc9 0x3b 0x3a keycode 60= 0xed 0xcd 0x60 0x7e keycode 53= 0xf3 0xd3 0x3d 0x2b keycode 46= 0xf6 0xd6 0x30 0x29 keycode 52= 0xfc 0xdc 0x2d 0x5f keycode 54= 0xf5 0xd5 0x5b 0x7b keycode 56= 0xfb 0xdb 0x5c 0x7c keycode 55= 0xfa 0xda 0x5d 0x7d keycode 125= 0xff1b 0xff1b 0xff1b 0xff1b keycode 48= 0xffca 0xffca 0xffca 0xffca keycode 102 = 0xffb7 keycode 99 = 0xffb4 keycode 100 = 0xffb5 keycode 101 = 0xffb6 keycode 94 = 0xffab keycode 92 = 0xffd7 keycode 106 = 0xffff keycode 104= 0xffb9 keycode 103= 0xffb8 keycode 96= 0xffb1 keycode 97= 0xffb2 keycode 98= 0xffb3 keycode 105= 0xffb0 keycode 35= 0x7a 0x5a keycode 36= 0x79 0x59 remove Lock = Caps_Lock remove Control = Control_L keysym Control_L = Caps_Lock keysym Caps_Lock = Control_L add Lock = Caps_Lock add Control = Control_L keycode 108 = NoSymbol Though there's no problem with AWT components and the accented characters, swing components does not receive KEY_PRESSED events for the 'accented' keys, the key code in the events is always zero, and the key char differs in KEY_RELEASED from that of KEY_TYPED in case of the super-ASCII unicode characters. The (somewhat edited) result of the test code is (P=pressed, T=typed, R=released. The format is EventTypeKeyCode-KeyChar-(int)KeyChar). Keys pressed are ;[=a in both cases AWT component P0-?-233 T0-?-233 R0-?-233 P0-?-245 T0-?-245 R0-?-245 P0-?-243 T0-?-243 R0-?-243 P65-a-97 T0-a-97 R65-a-97 Swing component T0-?-233 R0-?-233 # missing key pressed event T0-o-337 R0-?-245 # different (code page converted) key char in KEY_RELEASED T0-?-243 R0-?-243 P65-a-97 T0-a-97 R65-a-97 # correct result for regular key Listening to AWT key events provides an even weirder result... UNcomment commented lines to experience it. The test code follows: import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TestFrame extends JFrame { public TestFrame() { addWindowListener(new ExitAdapter()); TextField textField = new TextField(); JTextField textField2 = new JTextField(); getContentPane().add(textField, BorderLayout.NORTH); getContentPane().add(textField2, BorderLayout.SOUTH); KAdapter adapter = new KAdapter(); textField2.addKeyListener(adapter); textField.addKeyListener(adapter); /* Toolkit.getDefaultToolkit().addAWTEventListener(adapter, AWTEvent.KEY_EVENT_MASK); */ } public static void main(String[] args) { TestFrame frame = new TestFrame(); frame.pack(); frame.show(); } class KAdapter extends java.awt.event.KeyAdapter implements java.awt.event.AWTEventListener { public void eventDispatched(AWTEvent event) { /* System.out.print(" AWT" + event.getID() + " "); */ } public void keyTyped(java.awt.event.KeyEvent e) { key(e, 'T'); } public void keyPressed(java.awt.event.KeyEvent e) { key(e, 'P'); } public void keyReleased(java.awt.event.KeyEvent e) { key(e, 'R'); } public void key(java.awt.event.KeyEvent e, char type) { int code = e.getKeyCode(); char khar = e.getKeyChar(); int charInt = (int) khar; System.out.print(type); System.out.print(code); System.out.print('-'); System.out.print(khar); System.out.print('-'); System.out.print(charInt); System.out.print(' '); if (type == 'R') System.out.println(); } }; } I have not experienced these problems on Windows 2000, Java SDK 1.3.1, Hungarian regional settings. Kertes Gabor (Review ID: 129071) ====================================================================== Name: jk109818 Date: 12/20/2001 FULL PRODUCT VERSION : java version "1.4.0-rc" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-rc-b87) Java HotSpot(TM) Client VM (build 1.4.0-rc-b87, mixed mode) FULL OPERATING SYSTEM VERSION : SunOS 5.8 Generic_108528-01 sun4u sparc SUNW,Ultra-5_10 with French locale and French keyboard. A DESCRIPTION OF THE PROBLEM : KeyPressed Event is not called, when I pressed accented characters from the French keyboard. ? 00B2 Superscript two ? 00E0 Latin small letter a with grave ? 00E7 Latin small letter c with cedilla ? 00E8 Latin small letter e with grave ? 00E9 Latin small letter e with acute ? 00F9 Latin small letter u with grave STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : 1. Run the following program 2. Key in the following list to jTextField1 from French keyboard //exp: the keycode is displayed as well as other keys. //act: nothing is displayed. ? 00B2 Superscript two ? 00E0 Latin small letter a with grave ? 00E7 Latin small letter c with cedilla ? 00E8 Latin small letter e with grave ? 00E9 Latin small letter e with acute ? 00F9 Latin small letter u with grave EXPECTED VERSUS ACTUAL BEHAVIOR : Expected: The appropriate keycode is displayed on the standard output, after I key in the accented characters from French keyboard as well as other key tops. Actual: //act: Following keys display nothing to the standard output. ? 00B2 Superscript two ? 00E0 Latin small letter a with grave ? 00E7 Latin small letter c with cedilla ? 00E8 Latin small letter e with grave ? 00E9 Latin small letter e with acute ? 00F9 Latin small letter u with grave This bug can be reproduced always. ---------- BEGIN SOURCE ---------- // Frame1.java package frenchkeyboard; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Frame1 extends JFrame { JTextField jTextField1 = new JTextField(); public Frame1() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Frame1 frame1 = new Frame1(); frame1.setSize(new Dimension(400,300)); frame1.setVisible(true); } private void jbInit() throws Exception { jTextField1.setText("jTextField1"); jTextField1.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(KeyEvent e) { jTextField1_keyPressed(e); } }); this.getContentPane().add(jTextField1, BorderLayout.CENTER); } void jTextField1_keyPressed(KeyEvent e) { System.out.println("keyPressedKeycode:"+ e.getKeyCode()); System.out.println("keyPressedKeychar:"+ e.getKeyChar()); } } // End of Frame1.java ---------- END SOURCE ---------- (Review ID: 137590) ====================================================================== ###@###.### 2004-07-29
|