【发布时间】:2011-12-05 12:27:46
【问题描述】:
当我按下键盘上的"Delete" 按钮时,程序会收到三个事件-KEY_PRESSED、KEY_TYPED 和KEY_RELEASED。问题是,在KEY_PRESSED 和KEY_RELEASED 中设置了参数"keyCode",但在KEY_TYPED 中却没有设置(事实上,在该事件中没有有意义的信息)。使用F5 键,就更有趣了——KEY_PRESSED 和KEY_RELEASED 被注册,但KEY_TYPED 永远不会出现。
监听器是通过Toolkit.getDefaultToolkit().addAWTEventListener() 添加的。使用 JDK 6.26。
我的问题可能是什么?
编辑:
以下是按下Delete 键时发生的事件:
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=127,keyText=Delete,keyChar=Delete,keyLocation=KEY_LOCATION_STANDARD,rawCode=119,primaryLevelUnicode=127,scancode=0] on javax.swing.JButton[,0,0,61x30,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.synth.SynthBorder@50f38cf0,flags=288,maximumSize=,minimumSize=,preferredSize=,defaultIcon=javax.swing.ImageIcon@6ae2d0b2,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=SVG,defaultCapable=false]
java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar=Delete,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=127,scancode=0] on javax.swing.JButton[,0,0,61x30,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.synth.SynthBorder@50f38cf0,flags=288,maximumSize=,minimumSize=,preferredSize=,defaultIcon=javax.swing.ImageIcon@6ae2d0b2,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=SVG,defaultCapable=false]
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=127,keyText=Delete,keyChar=Delete,keyLocation=KEY_LOCATION_STANDARD,rawCode=119,primaryLevelUnicode=127,scancode=0] on javax.swing.JButton[,0,0,61x30,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.synth.SynthBorder@50f38cf0,flags=288,maximumSize=,minimumSize=,preferredSize=,defaultIcon=javax.swing.ImageIcon@6ae2d0b2,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=SVG,defaultCapable=false]
【问题讨论】:
-
这里有什么问题?你检查这是否是正常行为?如果是这样,如果它没有你需要的信息,你是否可以不只是有一个 if 语句忽略事件,如果它等于 KEY_TYPED?
-
@Mike - 我的问题是,当用户在他的键盘上键入 Del 或 F5 时,我真的需要知道。
-
您不能从 KEY_PRESSED keyCode 中获取该信息吗?
-
常见问题:a) 为什么需要 keyListener b) 为什么需要全局锤子? (两者都与 keyBindings 相对)
-
全局快捷方式听起来像是键绑定的用例 :) 使用 WHEN_IN_FOCUSED_WINDOW 类型的 rootPane 的 inputMap 注册
标签: java swing keyboard keyboard-shortcuts keylistener