Java不会产生正确的AltGr键事件

时间:2012-01-09 21:16:02

标签: java events keyboard

我正在我的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 时,它会报告:

KEY PRESSED:
  key code = 17 (Ctrl)
  extended modifiers = 128 (Ctrl)
  action key? NO
  key location: left
KEY PRESSED:
  key code = 18 (Alt)
  extended modifiers = 640 (Ctrl+Alt)
  action key? NO
  key location: right
KEY RELEASED:
  key code = 17 (Ctrl)
  extended modifiers = 512 (Alt)
  action key? NO
  key location: left
KEY RELEASED:
  key code = 18 (Alt)
  extended modifiers = 0 (no extended modifiers)
  action key? NO
  key location: right

2 个答案:

答案 0 :(得分:4)

Windows中的

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

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

答案 1 :(得分:0)

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

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