如何在 Java 中为其他程序制作虚拟键盘?

How to make a Virtual Keyboard in Java for other programs?

我想在 Java 中为触摸屏超极本制作虚拟键盘之类的东西。例如,我想使用虚拟键盘输入 Microsoft Word。

我目前所做的就是用JButton代表按键,用Robotclass模拟电脑输入。

我遇到的问题是当我按下 JButton 时,它聚焦 JButton,因此 Robot class 将输入定向到 JButton 而不是我要输入的程序,例如 Microsoft Word。

按钮 A 的代码如下所示

int KeyValue = KeyEvent.VK_A;
Robot robot ...

JButtton.addMouseListener(new MouseListener(){
    ...
    public void mousePressed(MouseEvent e){
        robot.keyPress(KeyValue);
    }
    public void mouseReleased(MouseEvent e){
        robot.keyRelease(KeyValue);
    }
    ...
}
...

我已经确认按钮被按下了。我向 JButton 添加了一个 KeyListener,每当我单击该按钮时都会按下 "A",但它指向 JButton 而不是其他程序。

我试过使用JButton.setFocusable(false),但没用...

我搜索了其他与我的问题类似的问题,但它们都是在本地输入另一个 Java Window 或文本框,而不是另一个程序。

所以我的问题是 - 如何制作一个可以输入其他程序的虚拟键盘?最好使用 JButtons,但我愿意接受任何建议吗?

设置 JFrame 属性 的 setFocusableWindowState(false);