[英]KeyEvent characters
我有一个关于KeyListener
的问题。 当我得到KeyEvent
并执行一个getKeyChar()
我正在使用和*
星号进行比较,我将使用其中一个KeyEvent.VK_
定义哪个适用于很多键。
但是对于这个特定的键和其他一些键值不匹配。
* getKeyChar()
将返回0x2a
, getKeyCode()
将返回0x38
。 0x38
的定义是VK_8
而不是VK_ASTERISK
,即0x97
。
为什么某些密钥代码匹配而不是其他密钥代码。 大多数人都这样做。 如果我只是做一个有效的字符比较( == '*')
,但我不确定这是否是最佳解决方案?
谢谢大家的帮助!!!
好吧,你误会了什么。
键是键,符号是符号。 按键是按键的结果,相同的按键可能会根据情况产生不同的符号( Alt , Control , Shift等组合键 )。
因此, VK_8
键代码代表可以产生符号8
, *
的键 ,可能还有其他键 ,这取决于键盘的本地化。
而数字键盘上的*专用键是VK_MULTIPLY
- 它只能生成一个符号*
(据我所知)。
你可能不应该关心的是,用户按下按键 ,而是该用户作用产生的符号 。
这个信息可以通过getKeyChar()
获得,但请注意,如果用户按Shift 8组合生成*
它实际上是两个键( Shift和8 ),你将得到两个事件,第一个(用于Shift )将产生一个不可读的符号。
取决于JComponent
如果要从JTextComponent确定然后使用DocumentListener ,如果要修改Char序列,则使用DocumentFilter
否则请查看KeyBindings ,因为KeyListener是为AWT Components
指定的
KeyEvent.VK_ASTERISK
是为(虚拟)键盘键保留的常量,其上标有*。 它不必匹配有人按下键时产生的字符。
如果要使用VK常量,则必须侦听键入和按键事件,并使用KeyEvent.getKeyCode()
方法。 如果要使用字符, KeyEvent.getKeyChar()
监听键入的事件,并使用KeyEvent.getKeyChar()
方法。
一些关键代码可能只匹配字符,因为它更容易以这种方式定义它; 没有必要这样做。
你说你从getKeyCode
获得了一个getKeyCode
来输入星号。 您是否按下了实际的星号键或是否必须键入Shift-8?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.