3

Java3D キャンバスの上に Java Swing コンポーネントを表示して操作できるようにしようとしています。透明な JPanel をバッファリングされたイメージにペイントし、J3DGraphics2D を使用してそのバッファをキャンバスにペイントすることで、コンポーネントを表示しています。

私が理解できないのは、マウス イベントを JPanel のスイング コンポーネントに転送する方法です。Canvas3D のすべてのキーボードとマウスのイベントを JPanel にディスパッチしてから、swing コンポーネントによってキャプチャされない場合 (たとえば、マウスがそれらのいずれにもない場合)、Canvas3D にフォールバックするようにします。

Container.dispatchEvent(AWTEvent) を呼び出してみましたが、たとえばマウス カーソルがコンテナのボタンの真上にある場合でも、適切なコンポーネントにイベントが正常にディスパッチされません。

これを行う方法を知っている人はいますか?それは可能であるべきです。

4

1 に答える 1

0

やっと、わかった!JCanvas3D と JLayeredPane を使用してください。これは、postRender() で Swing コンポーネントをレンダリングするのとは逆のアプローチです。JCanvas3D はオフスクリーン バッファにレンダリングしてから、AWT で画面にペイントし、透明であっても JLayeredPane 内のコンポーネントと適切に相互作用する軽量のキャンバスを作成します。 .

注意すべきことの 1 つ - JCanvas3D はすべての入力をオフスクリーンの Canvas3D にリダイレクトしますが、最初、Orbiter は重い Canvas3D のようには機能しませんでした。マウスとキーのリスナーを JCanvas3D に追加するだけです。リスナーが登録されていない場合、AWT はこれらのイベントを配信しません。

于 2011-06-10T20:30:45.557 に答える