[英]Simulate MouseEvent, KeyEvent, etc
我正在研究在无头环境中的Java上运行的应用程序。 我正在通过自定义类处理所有输入和输出; 我的根JPanel
正在绘制到BufferedImage
,然后将其呈现给用户。 但是,我在传递MouseEvents
以允许JPanel
及其子代处理它们时遇到麻烦。
当前,我的主类的构造函数( JPanel
的子代)使用:
this.enableInputMethods(true);
this.enableEvents(~0);
然后,在onMouseDown(MouseEvent e)
和朋友( 确实执行)中:
dispatchEvent(e);
我也尝试过processEvent(e)
和processMouseEvent(e)
,但无济于事。
我正在使用JPanel
子类作为源,并使用MOUSE_PRESSED
及其朋友作为ID来生成MouseEvent
。
我还可以在构造函数或事件处理程序中做些其他事情,以允许JPanel
将事件作为正常事件处理,将其传递给子事件并触发任何ActionEvents
和焦点更改吗?
我有一个目前正在实施的解决方法,手动创建ActionEvents
并跟踪当前关注的组件。 目前,我正在努力将MouseEvents
传递给子组件,但这就是我所拥有的。
Component c = findComponentAt(e.getX(), e.getY());
if(c!=null){
ActionEvent ae = new ActionEvent(c,ActionEvent.ACTION_PERFORMED,"");
ActionListener[] listeners = c.getListeners(ActionListener.class);
for(ActionListener l:listeners){
l.actionPerformed(ae);
}
if(c.isFocusable()) setFocusedComponent(c);
}
诚然,这很混乱,但是在没有更好的追求的道路上,我必须以这种方式实现它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.