使用第一个答案的编辑版本这个问题 https://stackoverflow.com/questions/14301775/get-key-combinations:
import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
public class Sample implements KeyListener {
private JLabel label = new JLabel("Hello");
private JPanel panel = new JPanel(new BorderLayout());
private JFrame frame = new JFrame("Sample");
public Sample() {
panel.add("North", label);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
panel.addKeyListener(this);
frame.addKeyListener(this);
label.addKeyListener(this);
pnl.setVisible(true);
}
public static void main(String[] args) {
new Sample();
}
@Override
public void keyPressed(KeyEvent key) {
System.out.println(key.getExtendedKeyCode());
System.out.println(key.getKeyCode());
System.out.println(key.getModifiers());
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
}
您可以检查KeyEvent
此程序中任何键的键代码。对我来说(Fedora 19 x86_64、Oracle Java 1.7.0_40 x86_64)meta键确实映射到524,根据常数值查找表 http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.awt.event.KeyEvent.VK_WINDOWS被映射到VK_WINDOWS
现在的问题是,当您尝试通过按下该键时java.awt.Robot
:
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
public class RobotTest {
public static void main(String[] args) {
Robot r = null;
try {
r = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
r.setAutoDelay(250);
r.keyPress(KeyEvent.VK_WINDOWS);
r.keyPress(KeyEvent.VK_Z);
r.keyRelease(KeyEvent.VK_Z);
r.keyRelease(KeyEvent.VK_WINDOWS);
}
}
我的系统快捷方式运行konsole
不是通过按下触发的meta+z with Robot
.
我猜是 AWT,或者Robot
本身正在处理meta不知何故按键不正确。也许Java还没有达到使用标准WindowsLinux 中的 key - 例如 Gnome Shell 键盘快捷键。
我个人会尽量不使用它,或者尝试不同的框架,例如Eclipse SWT。
尝试运行RobotTest
使用 OpenJDK 并没有产生任何更好的结果。