java - 如果生成字符时发生KEY_TYPED事件,那么为什么KeyEvent的code参数包含VK_UNDEFINED?

标签 java keyevent

我正在借助 Java:Herbert Schildt 的完整引用资料(第 8 版)来了解 Java。 在阅读时,我发现 KEY_TYPED 事件仅在生成字符时发生。那不是说生成了一个字符(0-9,A-Z)吗?如果是这样,那么不应该将相应的 ASCII 等效项作为代码传递给 KeyEvent 构造函数:

KeyEvent(Component src, int type, long when, int modifiers, int code, char ch)

但是书上说,对于 KEY_TYPED 事件,代码将包含 VK_UNDEFINED。这里的代码不是用键入的键定义的吗?

最佳答案

这是因为 KEY_TYPED 事件不一定有对应的 VK 代码。 VK码来自键盘,代表一个键。如果我按“a”键,我将看到带有 VK_A 代码的按键事件。现在,正如您所说,KEY_TYPED 事件在生成字符时发生。问题是,字符是操作系统通过取决于语言环境的字符映射翻译 VK 代码后生成的。

举个例子,我可以使用键盘通过特定的按键组合输入“ö”。这将触发一系列带有 VK_SHIFT、VK_DEAD_CIRCUMFLEX 和 VK_O 的关键事件,但只有一个带有“ö”字符的 KEY_TYPED 事件。更糟糕的是,我可以通过按 6 个键 (ALT+0+1+4+1+4) 来输入“†”,但同样,只会触发一个 KEY_TYPED 事件。现在,您会在事件中放入什么 VK 代码?这实际上并没有什么意义,因此他们决定始终使用 VK_UNDEFINED 来保持一致,即使是简单的字符也是如此。

关于java - 如果生成字符时发生KEY_TYPED事件,那么为什么KeyEvent的code参数包含VK_UNDEFINED?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27787477/

相关文章:

java - 尝试从 Java 源代码调用 JavaScript 函数

java - 尝试播放音频 (.wav) 文件时没有声音

Java:将 "VK_UP"更改为 KeyEvent.VK_UP

python - 在 Python 中使用 Tkinter 进行关键事件处理

java - ServletRequest 中的 session 变量

java - 404 错误(Servlet)

按下鼠标左键时的 Java 鼠标悬停事件

android - 安卓中的按键事件

java - KeyTyped 事件无法识别冒号键

java - 将系统变量传递给部署到 tomcat 的应用程序