繁体   English   中英

KeyEvent字符

[英]KeyEvent characters

我有一个关于KeyListener的问题。 当我得到KeyEvent并执行一个getKeyChar()我正在使用和*星号进行比较,我将使用其中一个KeyEvent.VK_定义哪个适用于很多键。

但是对于这个特定的键和其他一些键值不匹配。

* getKeyChar()将返回0x2agetKeyCode()将返回0x38 0x38的定义是VK_8而不是VK_ASTERISK ,即0x97

为什么某些密钥代码匹配而不是其他密钥代码。 大多数人都这样做。 如果我只是做一个有效的字符比较( == '*') ,但我不确定这是否是最佳解决方案?

谢谢大家的帮助!!!

好吧,你误会了什么。

键是键,符号是符号。 按键是按键的结果,相同的按键可能会根据情况产生不同的符号( AltControlShift等组合 )。

因此, VK_8 代码代表可以产生符号8* ,可能还有其他 ,这取决于键盘的本地化。

而数字键盘上的*专用VK_MULTIPLY - 它只能生成一个符号* (据我所知)。

你可能不应该关心的是,用户按下按键 ,而是该用户作用产生的符号

这个信息可以通过getKeyChar()获得,但请注意,如果用户按Shift 8组合生成*它实际上是两个键( Shift8 ),你将得到两个事件,第一个(用于Shift )将产生一个不可读的符号。

取决于JComponent

如果要从JTextComponent确定然后使用DocumentListener ,如果要修改Char序列,则使用DocumentFilter

否则请查看KeyBindings ,因为KeyListener是为AWT Components指定的

  1. KeyEvent.VK_ASTERISK是为(虚拟)键盘键保留的常量,其上标有*。 它不必匹配有人按下键时产生的字符。

    如果要使用VK常量,则必须侦听键入和按键事件,并使用KeyEvent.getKeyCode()方法。 如果要使用字符, KeyEvent.getKeyChar()监听键入的事件,并使用KeyEvent.getKeyChar()方法。

    一些关键代码可能只匹配字符,因为它更容易以这种方式定义它; 没有必要这样做。

  2. 你说你从getKeyCode获得了一个getKeyCode来输入星号。 您是否按下了实际的星号键或是否必须键入Shift-8?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM