【发布时间】:2021-04-18 14:43:11
【问题描述】:
所以我试图将 KeyEvent 发送到 JFrame 组件。就像当你在窗口正常聚焦时按下一个键时,它会向 JFrame 发送一个 KeyEvent 并触发一些东西。但是我该如何模拟呢?没有Robot类,就像直接将KeyEvent输入到JFrame组件中一样?
我发现了如何将 MouseEvents 发送给它,您可以通过创建一个 MouseEvent 对象并调用 component.dispatchEvent(MouseEvent) 来做到这一点。然后将鼠标事件发送到 JFrame 并且它工作得很好。但是用 KeyEvents 做同样的事情似乎不起作用。我已经尝试了几乎所有的事情,比如在 KeyEvent 等之前发送 FocusEvent。似乎没有任何效果。
这是我试图发送给它的 KeyEvent 对象。它使用与有效的 MouseEvent 相同的目标和东西。所以这应该不是问题,问题是发送到组件不起作用。 “key”参数是 KeyEvent.VK_2 之类的密钥 id
KeyEvent ke = new KeyEvent(target, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), 0, key, (char)key);
KeyEvent ke = new KeyEvent(target, KeyEvent.KEY_RELEASED, System.currentTimeMillis(), 0, key, (char)key);
【问题讨论】:
-
你为什么要向框架发送“2”。 KeyEvent 通常被分派给具有焦点的组件。框架不会有焦点,框架上的组件将有焦点。因此,我认为您尝试的解决方案不会解决问题。你想解决什么问题。发布您的minimal reproducible example 来证明问题。
-
是的,我的意思是 JFrame 中的一个组件,抱歉。所以我的问题是你如何将 KeyEvent 发送到组件? component.dispatchEvent() 不适用于 KeyEvents,但至少对我适用于 MouseEvents。
标签: java swing jframe components keyevent