我为我的应用程序做了一个关键的监听器,当用户按下shift键+一个键时,我需要识别关键代码。
例如,当用户按下shift键+键2
(英文键盘)时,它应该打印@
。我做了一个快速切换/案例来识别哪个是移位键,但它不适用于azerty键盘或mac键盘。
java中是否有办法获取移位的密钥?
很难解释。
我的java应用程序只是获取键码,我需要的是与键码相关联的移位键码。
例如:
目前,我的代码就是这样(仅适用于qwerty KB)
String value = String.valueOf((char)key);
if (shift)
{
switch (value.charAt(0))
{
case '1':
return "!";
case '2':
return "@";
case '3':
return "#";
.....
感谢您的帮助。
问候。
答案 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;
我希望这可以帮助别人。
问候。