2011-01-17 19 views
3

アプレットのガラスペインを使ってアプレットの一部を拡大するプログラムを作成しました。これを行うために、私はもちろん、アフィン変換を使用してコンテンツペインのレンダリングされたコンテンツをスケールしてから、ペインにペイントします。しかし、マウスイベントは、適切な位置にくるために別のトランスフォームによって逆にスケールされなければならないので、私はそれらをガラス区画で傍受して座標を変換する必要があります。しかし、これを実行した後、イベントをコンテンツペインに転送する方法を見つけることができませんでした。最初はComponent.dispatchEvent(AWTEvent)メソッドを試しましたが、これは転送しようとするイベントを無視するようです。手動でコンポーネントを取得し、各mouseListenerおよびmouseMotionListenerのメソッドを呼び出すことで成功しましたが、これらの結果は最高でもバグです。コンポーネントにイベントを送信する標準的な方法はありますか?マウスのイベントをJavaの隠れたパネルに転送する

答えて

1

は、以下のことを試してみてください。

Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(theEvent)

私は私はそれが動作するはずと信じてこれを自分でしようとしませんでした。少なくとも私が理解する限り、UIテストツールはこの方法を使用しています。

ところで、どのように拡大鏡を実装していないのですか?ロボットを使う?

+0

SystemEventQueueにイベントをポストすると機能しません。位置をスケール解除するために、入力イベントをガラスペインにトラップしているので、無限ループに陥ります。ガラス板の下にあるコンテンツペインにイベントを投稿する必要があります。 –

+1

どのように拡大を実装したかについては、基本的にアプレットの正確なサイズのBufferedImageを作成した後、バッファリングされたイメージ上でcreateGraphics()を呼び出して、Graphics2Dオブジェクトを取得し、次にScaling AffineTransformオブジェクトを適用します。次に、GlassPanelのペイントメソッドをオーバーライドし、単にバッファリングされたイメージをパネルに描画させます。残りのすべては、アプレットのコンテンツペインでペイントを呼び出すスレッドを持ち、バッファされたイメージのスケーリングされたグラフィックスオブジェクトを渡すことです。 –

+0

私は操作したいコンポーネントにイベントのソースオブジェクトを再割り当てしようとしましたが、これは無限ループの問題を解決するようですが、まだイベントを適切に転送していません。 –

関連する問題