0

我为我的应用程序制作了一个按键监听器,当用户按下 shift 键 + a 键时,我需要识别按键代码。

例如,当用户按下 shift 键 + 键2(英文键盘)时,它应该打印@. 我做了一个快速开关/外壳来识别哪个是移位键,但它不适用于 azerty 键盘和 mac 键盘。

java中有没有办法获得移位的键或其他东西?

这很难解释。

我的 java 应用程序只是获取键码,我需要的是与键码关联的移位键码。

前任:

  • (QWERTY) 2 => @; 3 => #; ETC...
  • (AZERTY) & => 1; é => 2; ETC...

目前,我的代码是这样的(仅适用于 qwerty KB)

String value = String.valueOf((char)key);
    if (shift)
    {
        switch (value.charAt(0))
        {
            case '1':
                return "!";
            case '2':
                return "@";
            case '3':
                return "#";

            .....

谢谢你的帮助。

问候。

4

3 回答 3

1

尝试使用KeyEvent#getKeyChar(). 对于一个事件Shift+a,这将返回A。但这仅适用于KeyListener#keyTyped()方法,不适用于其他方法 ( keyReleased/keyPressed)。这是一个小例子,效果很好。我尝试了不同的键盘布局。您的示例 ( Shift+2)@以 qwerty 等形式返回。

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;

public class Maion {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(600, 400);
        frame.addKeyListener(new KeyAdapter() {
            @Override
            public void keyTyped(KeyEvent e) {
                System.out.println("keyTyped: '" + e.getKeyChar() + "'");
            }
        });
        frame.setVisible(true);
    }
}
于 2012-06-18T09:27:29.717 回答
0

最后,我制作了一个框架,允许用户选择他的键盘布局。然后我做了一个简单的 swith/case 来获得换档的钥匙。

String value = String.valueOf((char)key);
if (shift && keyboard.equals("QWERTY"))
{
    switch (value.charAt(0))
    {
        case '1':
            return "!";
        case '2':
            return "@";
        case '3':
            return "#";
    }
}
else if (shift && keyboard.equals("AZERTY"))
{
    switch (value.charAt(0))
    {
        case '&':
            return "1";
        case 'é':
            return "2";
        case '"':
            return "3";
    }
}
else return value;

我希望这可以帮助别人。

问候。

于 2012-06-29T08:31:42.057 回答
0

查看 KeyEvent 类中的方法 getModifiers()。这将告诉您按下了哪些特殊键(Alt、Ctrl、Shift)

例子:

boolean oneShift = (keyEvent.getKeyCode() == KeyEvent.VK_1) && "Shift".equals(KeyEvent.getKeyModifiersText(keyEvent.getModifiers()))
于 2012-06-18T09:21:16.067 回答