2

我正在开发一个在无头环境中在 Java 上运行的应用程序。我正在通过自定义类处理所有输入和输出;我的根JPanel正在绘制到 aBufferedImage然后呈现给用户。但是,我无法MouseEvents让 theJPanel及其子级处理它们。

目前,我的主类(的子类)的构造函数JPanel使用:

this.enableInputMethods(true);
this.enableEvents(~0);

然后,在onMouseDown(MouseEvent e)和朋友(确实被执行):

dispatchEvent(e);

我也试过processEvent(e)and processMouseEvent(e),但无济于事。

我正在生成MouseEvent使用JPanel子类作为源,并使用MOUSE_PRESSED它的朋友作为 ID。

在构造函数或事件处理程序中我还能做些什么来允许将JPanel事件作为普通事件处理,将其传递给其子级并触发任何ActionEvents焦点更改?

4

1 回答 1

0

我有一个我目前正在实施的解决方法,手动创建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);
}

诚然,它非常混乱,但在没有更好的追求途径的情况下,我必须以这种方式实现它。

于 2012-12-19T20:42:51.870 回答