Java中键盘事件的奇怪行为
当我按下键盘上的Java中键盘事件的奇怪行为,java,swing,keyboard,keyboard-shortcuts,keylistener,Java,Swing,Keyboard,Keyboard Shortcuts,Keylistener,当我按下键盘上的“Delete”按钮时,程序会收到三个事件-按键按下,按键键入,以及按键释放。问题是,在按下键和释放键时,设置了参数“keyCode”,但在键入的键中没有设置(事实上,在该事件中没有有意义的信息)。使用F5键,它甚至更有趣-键被按下和键被释放都被注册,但是键被键入从未出现过 监听器是通过Toolkit.getDefaultToolkit().addAWTEventListener()添加的。使用jdk6.26 我有什么问题 编辑: 以下是按下Delete键时发生的事件: jav
“Delete”
按钮时,程序会收到三个事件-按键按下
,按键键入
,以及按键释放
。问题是,在按下键和释放键时,设置了参数“keyCode”
,但在键入的键中没有设置(事实上,在该事件中没有有意义的信息)。使用F5
键,它甚至更有趣-键被按下
和键被释放
都被注册,但是键被键入
从未出现过
监听器是通过Toolkit.getDefaultToolkit().addAWTEventListener()
添加的。使用jdk6.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]
- 最好是工具
- 键盘的一部分是内置JComponent功能的保留键,@camickrs提供了更多信息
- 取决于您需要Implements KeyListener的原因,因为各种JComponent都有许多其他侦听器,它们应该在其中过滤或注册文本更改
- 一些JComponent模型通过鼠标和键盘输入生成事件
来自的“按键类型”事件。此事件在输入字符时生成。在最简单的情况下,它是由一次按键产生的。但是,字符通常是由一系列按键产生的,按键事件到按键类型事件的映射可能是多对一或多对多。
您正在尝试获取F5密钥,该密钥可能未注册为正在输入的字符。通过使用已发布的密钥,您将始终获得所需的结果,并且API的行为符合预期。密钥类型的事件始终生成“0”作为密钥代码。改为查找方法getKeyChar(),或者(正如建议的那样)改为侦听keyReleased()。
getKeyChar():这里有什么问题?你检查过这是否是正常行为吗?如果是这样的话,你能不能让一个If语句忽略事件,如果它等于键入的键,如果它没有你需要的信息呢?@Mike-我的问题是我真的需要知道,当用户在键盘上键入Del或F5时。你不能从按下的键代码中获取信息吗?常见问题:a)你为什么需要键盘监听器b)你为什么需要全局锤子?(两者都与键绑定相反)全局快捷键听起来像是键绑定的用例:)在键绑定的“聚焦”窗口中的“\u+1”中注册根窗格的inputMap类型。对于这样的需求,您很少需要使用KeyListener。