【问题标题】:Java does not produce proper AltGr key eventJava 不产生正确的 AltGr 键事件
【发布时间】:2012-02-06 09:27:08
【问题描述】:

我在我的 Java 应用程序中按下 AltGr 键,但我没有收到带有键码 VK_ALT_GRAPH 的 KeyEvent,而是收到了两个事件。第一个键码为 VK_CONTROL,第二个键码为 VK_ALT。

这是正确的行为吗?

在 Windows 7 上使用 Java 7。可以使用 http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html 上的演示应用程序进行复制

当我按下 AltGr 时,它会报告:

按键: 键码 = 17 (Ctrl) 扩展修饰符 = 128 (Ctrl) 动作键?不 关键位置:左 按键: 键码 = 18 (Alt) 扩展修饰符 = 640 (Ctrl+Alt) 动作键?不 关键位置:右 密钥发布: 键码 = 17 (Ctrl) 扩展修饰符 = 512 (Alt) 动作键?不 关键位置:左 密钥发布: 键码 = 18 (Alt) 扩展修饰符 = 0(无扩展修饰符) 动作键?不 关键位置:右

【问题讨论】:

  • 在 Linux (Ubuntu) 上,它只触发一个事件,但键代码为 0 而不是 VK_ALT_GRAPH(我猜你可以使用 isAltGraphDown 检查状态)。这种行为似乎是高度特定于平台的。这是一个错误吗?
  • 这似乎是一些键盘布局的一般 win32 问题(例如德国 - 瑞士)。我希望将该问题移至 win32 输入,不确定是否有助于找到解决方案..

标签: java events keyboard


【解决方案1】:

在 windows 中,AltGrCtrl+Alt 是同义词。在某些语言环境(键盘布局?)中,它们都被视为 Ctrl+Alt,在其他语言环境中,它们都被视为 AltGr。但是,我不完全确定。

查看http://msdn.microsoft.com/en-us/library/windows/desktop/aa511502.aspx 并使用 Ctrl-F 找到 AltGr。

【讨论】:

  • 是的,我也听说过。但这对于没有 AltGr 键的人来说只是一件方便的事情。我相信 Windows 区分 Ctrl+Alt 和 AltGr
【解决方案2】:

您可以结合使用 getKeyCode 和 getKeyLocation。当你按下“Alt”时,你会分别得到“18”和“2”,但是当你按下“Alt Gr”时,你会得到每个值的两个值,“17,18”和“2,3”。这里的“2”和“3”代表key side,“18”是alt键码,可以这样操作:

if(e.getKeyCode() == 18 && e.getKeyLocation() == 3){
    System.out.println("Only triggers with Alt Gr");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多