[英]Java input method for Virtual Keyboard
我在为虚拟键盘实现Input方法时遇到问题。 目前,我正在使用机械手类从虚拟键盘将输入发送到任何应用程序。 但是为此,我需要创建键码和unicode的映射,这在不同的键盘布局上是不一致的,我可以使用Input方法将UNICODE直接传递给任何应用程序而不必担心键码和unicode之间的映射。
任何有用的链接或示例代码都会有用。
它是一个简单的Java程序,始终位于任何应用程序的顶部,并且可以用作屏幕键盘。 在按下键盘上的任何按钮(键)的同时使用鼠标,将在下面运行的应用程序中键入相应的字符。 这非常适合英文字母。 我在处理unicode时遇到问题。
在下面找到代码片段
public static void simulateKeyEvent(char key){
try{
AWTKeyStroke awtKS = AWTKeyStroke.getAWTKeyStroke(key);
int key_code = awtKS.getKeyCode();
System.out.println("key = "+key+" keyCode = "+key_code);
robot.keyPress(key_code);
robot.keyRelease(key_code);
}catch(Exception e){
e.printStackTrace();
}
}
我如何抚慰它:
//on startup: override the SystemEventQueue
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
final OwnEventQueue newEventQueue = new OwnEventQueue();
eventQueue.push(newEventQueue);
//because dispatchEvent is protected
public class OwnEventQueue {
private final static OwnEventQueue instance;
static{
instance = new OwnEventQueue();
}
@Override
public void dispatchEvent(AWTEvent event) {
super.dispatchEvent(event);
}
public static OwnEventQueue getInstance() {
return instance;
}
}
//then onpress of keyboard button
Character character = getCharacter();
int[] events = {KeyEvent.KEY_PRESSED, KeyEvent.KEY_RELEASED, KeyEvent.KEY_TYPED};
for (int i = 0; i < events.length; i++) {
KeyEvent pressKeyEvent = new KeyEvent(focusComponent, events[i], System.currentTimeMillis(), 0, 0, character.charValue());
OwnEventQueue.getInstance().dispatchEvent(pressKeyEvent);
}
robotKeystrokeSender.keyPress(KeyEvent.VK_RIGHT);
robotKeystrokeSender.delay(10);
robotKeystrokeSender.keyRelease(KeyEvent.VK_RIGHT);
操作系统是否将虚拟键盘用作设备? 或者,换句话说,您是否尝试过将其视为“真实”键盘? 根据Java硬件抽象,如果您将虚拟键盘视为驱动程序,则它应该像真正的键盘一样工作。
编辑 :根据评论,这不是虚拟设备,而是Java应用程序,因此问题有所不同。
根据Javadoc,Robot可以发送给定为int的击键 。 要创建角色的击键,我会建议您使用创建它们getKeystroke(char)
之前将其转换为使用整数getKeycode()
这样,您将使整数值与您的unicode字符相关联,无论它们是哪个。
编辑2 :再次修改;-)
似乎getKeyStroke(String)
“应该”处理Unicode字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.