Java 关键事件字符

Java 关键事件字符,java,swing,keyboard,keylistener,keyevent,Java,Swing,Keyboard,Keylistener,Keyevent,我有一个关于键侦听器的问题。 当我获取KeyEvent并执行getKeyChar()时,我正在与星号进行比较,*我打算使用一个KeyEvent.VK\u定义哪些键适用于许多键 但是对于这个特殊的键和其他一些键,值不匹配 *getKeyChar()将返回0x2a,而getKeyCode()将返回0x38。0x38的定义是VK_8而不是VK_星号,即0x97 为什么某些键码匹配而其他键码不匹配。大多数人都是这样。如果我只是做一个字符比较,它可以工作(='*'),但我不确定这是否是最好的解决方案 谢谢

我有一个关于
键侦听器的问题。
当我获取
KeyEvent
并执行
getKeyChar()
时,我正在与星号进行比较,
*
我打算使用一个
KeyEvent.VK\u
定义哪些键适用于许多键

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

*getKeyChar()
将返回
0x2a
,而
getKeyCode()
将返回
0x38
0x38
的定义是
VK_8
而不是
VK_星号
,即
0x97

为什么某些键码匹配而其他键码不匹配。大多数人都是这样。如果我只是做一个字符比较,它可以工作
(='*')
,但我不确定这是否是最好的解决方案

谢谢你的帮助

取决于

如果您想确定从然后使用,如果您想修改字符序列然后使用


否则,请看,因为它是为AWT组件指定的,所以您误解了什么

键是键,符号是符号。符号是按键的结果,同一个键可能会根据环境(Alt、Control、Shift等组合键)产生不同的符号

因此,
VK_8
代码代表可以产生符号的
*
,以及可能根据键盘定位产生的其他符号

数字键盘上的*专用键是
VK\u MULTIPLY
——据我所知,它只能产生一个符号
*

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

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

  • KeyEvent.VK_星号
    是为(虚拟)键盘键保留的常量,该键上有*标记。它不必与某人按下键时产生的角色匹配

    如果要使用VK常量,必须侦听向上键和向下键事件,并使用
    KeyEvent.getKeyCode()
    方法。如果要使用已侦听键类型事件的字符,请使用
    KeyEvent.getKeyChar()
    方法

    一些关键代码可能与字符匹配,只是因为这样更容易定义字符;没有必要这样做

  • 您说您从
    getKeyCode
    获得了一个VK_8,用于键入星号。你是按了实际的星号键还是必须键入Shift-8


  • 我用的只是一个JTextField。将其保留为getKetChar()=='*'有什么问题吗?这不总是有效的吗?对于一个只使用DocumentListener/DocumentFilter的JTextField来说,最后一个建议似乎对我有效,没有其他正确的方法。我得到了一个0xFFFF,它是一个未定义的字符,我只是忽略了这个移位,然后我在下一次执行getKeyChar()时执行getKeyChar()=='*',这似乎有效。谢谢!!当我按下数字键盘上的
    *
    时,我得到的是
    VK\u乘法
    而不是
    VK\u星号