2

ヘッドレス環境でJava上で実行されているアプリケーションに取り組んでいます。私はすべての入力と出力をカスタムクラスで処理しています。私のルートJPanelはに描画してBufferedImageいて、それがユーザーに表示されます。しかし、私はとその子供たちがそれらを処理MouseEventsできるようにするために通過するのに苦労しています。JPanel

現在、の子である私のメインクラスのコンストラクターはJPanel以下を使用しています。

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

次に、in onMouseDown(MouseEvent e)and friends(実行されます):

dispatchEvent(e);

私も試してみましprocessEvent(e)processMouseEvent(e)が、役に立ちませんでした。

サブクラスをソースとして使用し、そのフレンドをIDとしてMouseEvent使用して生成しています。JPanelMOUSE_PRESSED

コンストラクターまたはイベントハンドラーのいずれかで、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 に答える