- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好,所以我制作了一个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”,其他键也是如此。
我的问题是,正如您在第一张图片中看到的那样,某些按键生成无法识别的按键事件(带有红色条的事件)。
例如那两个键:
最佳答案
虚拟键可以根据所应用的修饰符进行更改。实际结果取决于键盘驱动程序本身,但例如...
Shift+1 将生成一个 KeyEvent
,其 keyCode
为 KeyEvent.VK_1
,但其 keyChar
为 !
你基本上忽略了这些修饰符......
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestKeyStrokes {
public static void main(String[] args) {
new TestKeyStrokes();
}
public TestKeyStrokes() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private JList keyList;
private DefaultListModel<String> model;
public TestPane() {
setLayout(new BorderLayout());
model = new DefaultListModel<>();
keyList = new JList(model);
add(new JScrollPane(keyList));
keyList.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
StringBuilder sb = new StringBuilder(64);
if (e.isShiftDown()) {
sb.append("[SHIFT]");
} else if (e.isAltDown()) {
sb.append("[ALT]");
} else if (e.isControlDown()) {
sb.append("[CTRL]");
} else if (e.isAltGraphDown()) {
sb.append("[ALT-GRPH]");
} else if (e.isMetaDown()) {
sb.append("[META]");
}
switch (e.getKeyCode()) {
case KeyEvent.VK_SHIFT:
case KeyEvent.VK_ALT:
case KeyEvent.VK_CONTROL:
case KeyEvent.VK_ALT_GRAPH:
case KeyEvent.VK_META:
break;
default:
sb.append("[").append(getVKText(e.getKeyCode())).append("/").append(e.getKeyChar()).append("]");
break;
}
model.addElement(sb.toString());
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.dispose();
}
}
private static VKCollection vKCollection;
static VKCollection getVKCollection() {
if (vKCollection == null) {
vKCollection = new VKCollection();
}
return vKCollection;
}
static String getVKText(int keyCode) {
VKCollection vkCollect = getVKCollection();
Integer key = Integer.valueOf(keyCode);
String name = vkCollect.findName(key);
if (name != null) {
return name.substring(3);
}
int expected_modifiers
= (Modifier.PUBLIC | Modifier.STATIC | Modifier.FINAL);
Field[] fields = KeyEvent.class.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
try {
if (fields[i].getModifiers() == expected_modifiers
&& fields[i].getType() == Integer.TYPE
&& fields[i].getName().startsWith("VK_")
&& fields[i].getInt(KeyEvent.class) == keyCode) {
name = fields[i].getName();
vkCollect.put(name, key);
return name.substring(3);
}
} catch (IllegalAccessException e) {
assert (false);
}
}
return "UNKNOWN";
}
static class VKCollection {
Map code2name;
Map name2code;
public VKCollection() {
code2name = new HashMap();
name2code = new HashMap();
}
public synchronized void put(String name, Integer code) {
assert ((name != null) && (code != null));
assert (findName(code) == null);
assert (findCode(name) == null);
code2name.put(code, name);
name2code.put(name, code);
}
public synchronized Integer findCode(String name) {
assert (name != null);
return (Integer) name2code.get(name);
}
public synchronized String findName(Integer code) {
assert (code != null);
return (String) code2name.get(code);
}
}
}
关于java.awt.event.KeyEvent 无法完全映射 AZERTY 键盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18599939/
我有一个 javafx 应用程序,它应该在 Windows 平板电脑上以全屏模式运行。 我的问题是,当键盘出现时,它是 QWERTY,而我的平板电脑是 AZERTY。 所以问题是:有没有办法使用系统虚
我最近开始学习 Vim,在深入学习之前,我有一个问题需要回答。 使用 AZERTY 键盘,我是否应该重新映射命令和快捷方式的键以适应 QWERTY 键盘的键位置? 我之所以问这个,是因为显然在创建这些
我正在 iOS 应用程序中构建自定义建议/自动更正功能。它必须检测意外的相邻按键,并将其与已知单词列表进行比较,以建议它认为用户打算键入的单词。 例如,如果自定义单词列表包含 cat , dog ,
如何在 JavaScript 中检测 AZERTY 键盘上问号的输入?在 QWERTY 键盘上,问号生成代码 191,但在 AZERTY 上它似乎生成代码 188(QWERTY 上的逗号)。或者我应该
已关闭。此问题不符合 Stack Overflow guidelines 。目前不接受答案。 已关闭 7 年前。 编辑问题以包含 desired behavior, a specific proble
我希望这不是重复的,但我已经浏览了论坛,但尚未找到任何答案。 我的 java 应用程序使用 Robot 类输入文本时遇到问题。提供文本并由应用程序将其打印出来。当用户使用 QWERTY 键盘时,一切正
我正在尝试实现一个 JavaScript 代码: 1- 获取用户在 HTML 表单输入文本中输入的字符 2-获取字符keyCode 3- 显示与之前的 KeyCode 相对应的阿拉伯语中的不同字符 例
目前 JavaFX 中存在一个错误(https://javafx-jira.kenai.com/browse/RT-30669,需要免费注册),如果您使用 azerty 键盘布局并指定其中包含 Z 的
当我在 qwerty 键盘上用 javascript 绑定(bind) ? 和 / 键时,它们具有相同的keycode (191) 但您必须按 shift 才能执行 ?。 我如何知道在 azerty
你好,所以我制作了一个java程序,每次按下一个键时都会显示keyEvent.getKeyCode()。 目的是能够使某种机器人能够使用 java 机器人类和一些 keyEvent 驱动 git/sk
是否可以在 iOS 的自定义键盘中添加 Qwerty 和 Azerty我有一个 DefaultKeyboard.swift 文件,我尝试添加任何类似 AzertyKeyboard.swift 的东西
我想根据键盘类型设置一些快捷键,这样总是一行键(Q-W-E或A-Z-E)。这将需要根据我知道的键盘类型对快捷方式进行硬编码。 是否可以使用 Qt 检索此信息? 最佳答案 您可以使用 http://do
快速背景: 当在浏览器中按下一个键时,会生成三个事件:keyDown、keyPress 和 keyUp。 keyDown 和 keyUp 有一个 keyCode 属性,它大约是按下的物理键。 keyP
我编码一个 iOS应用在 Swift 4 ,我是法国人,所以我使用法语/法语地区的手机工作。 使用 iOS 12 设备,我的登录页面上的密码字段工作正常(使用保存的密码自动登录甚至可以工作,我没有做任
一切正常,当我将 TMySqlConnection 驱动程序配置为使用 WAMP 本地服务器连接到本地计算机时,但是当尝试将驱动程序配置为连接到远程 MySQL 服务器时,出现错误. aceess d
我是一名优秀的程序员,十分优秀!