你好所以我做了一个java程序,每次按下一个键时都会显示keyEvent.getKeyCode()。
目的是能够使某种机器人能够使用 java 机器人类和一些 keyEvent 来驱动 git/skyrim/fraps。
但是,它似乎无法映射 AZERTY 键盘,因为您可以看到一些 keyEvent 代码是相同的。
还有其他驱动键盘的方法吗?
如果您想知道,这是该程序:
主要课程:
package keykeykey;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class MainClass {
public static void main(String args[]) throws Exception {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField nameTextField = new JTextField();
frame.add(nameTextField, BorderLayout.NORTH);
JTextField codeTextField = new JTextField();
frame.add(codeTextField, BorderLayout.SOUTH);
MyKeyListener myKeyListener = new MyKeyListener(codeTextField, nameTextField);
nameTextField.addKeyListener(myKeyListener);
frame.setSize(250, 100);
frame.setVisible(true);
}
}
keyListener 重定义
package keykeykey;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JTextField;
public class MyKeyListener extends KeyAdapter implements KeyListener {
public JTextField codeTextField;
public JTextField writeTextField;
public MyKeyListener(JTextField codeTextField, JTextField writeTextField) {
this.codeTextField = codeTextField;
this.writeTextField = writeTextField;
}
@Override
public void keyPressed(KeyEvent keyEvent) {
printIt("Pressed", keyEvent);
codeTextField.setText("code = " + keyEvent.getKeyCode());
}
@Override
public void keyReleased(KeyEvent keyEvent) {
codeTextField.setText("");
writeTextField.setText("");
}
@Override
public void keyTyped(KeyEvent keyEvent) {
//do nothing
}
private void printIt(String title, KeyEvent keyEvent) {
int keyCode = keyEvent.getKeyCode();
String keyText = KeyEvent.getKeyText(keyCode);
System.out.println(title + " : " + keyText + " / " + keyEvent.getKeyChar() + " code = " + keyEvent.getKeyCode());
}
}
谢谢。
Ps:是的,我知道 autoHotKey,但是我需要一种强类型语言,而且我喜欢 java。
编辑
我一定没有正确表达自己,我知道 shift+VK1 使“1”,其他键也是如此。
我的问题是,正如您在第一张图片中看到的那样,某些键会生成无法识别的键事件(带有红色条的事件)。
例如这两个键: