フレームやダイアログのスーパークラスであるWindowクラスについてメモ。
というか、ほとんど画像をドラッグする方法のメモ。
元々は ダイアログエディターでも作ってみようと思って、コンポーネントをドラッグ&ドロップする方法を考えていた。
最初はカーソルに独自画像をセットすればいいだろうと思ったんだけど、どうやら大きな画像はカーソルに出来ないらしい(縮小されてしまう)。
こりゃしょうがないなーと思って諦めかけたんだけど、ふとツールバーをフローティングさせていて、大きな四角が表示されているのに気がついた!
どうやってるのか調べてみたら、BasicToolBarUI$DragWindowでドラッグする為のウィンドウを作っていたというわけ。
この方式を使う場合、背景が透過しないのがちょっとネック。
フローティングツールバーでは、ドッキングさせる為のドラッグは背景が透過せず、ツールバー自体の移動では透過している(OSの設定を、ドラッグ時に透過させるようにしている場合)。
たぶんツールバー自体の移動はOSの機能で、ドッキングの場合は上記のDragWindowクラスを使っているんだろう。
画面に表示されている絵を画像として取得する方法は有るんだけど、これは今回の目的には使用できなかった。
すなわち、Windowの位置の画像を取得したいのだが、Windowを描画しようとする時点でその部分がクリアされてしまうらしく、描画のpaint()メソッドが呼ばれた時点では、実際に表示されている背景画像を取得できない。
また、仮に取得できたとしても、ドラッグ中の移動でもこのウィンドウがいちいち再描画されるわけではないので、移動していった先の新しい背景には切り替わらない。(これについては、再描画メソッドを呼んでやればいいだけという気もするけど)
まぁ、コンポーネントのドラッグなら、こんなウィンドウを作らなくても 直接コンポーネントの座標をドラッグに合わせて変えてやれば 動いて見えるんだけどね。
でもそうすると、元の位置に何も残らないからねぇ。
※コメント投稿者のブログIDはブログ作成者のみに通知されます