Java键盘得到转移char

时间:2012-06-18 09:10:47

标签: java keyboard shift qwerty

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

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

java中是否有办法获取移位的密钥?

很难解释。

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

例如:

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

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

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

            .....

感谢您的帮助。

问候。

3 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

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

示例:

boolean oneShift = (keyEvent.getKeyCode() == KeyEvent.VK_1) && "Shift".equals(KeyEvent.getKeyModifiersText(keyEvent.getModifiers()))

答案 2 :(得分: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;

我希望这可以帮助别人。

问候。