ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

画像をドラッグする方法

2007-02-11 21:12:34 | PG(Java)

フレームやダイアログのスーパークラスであるWindowクラスについてメモ。
というか、ほとんど画像をドラッグする方法のメモ。

元々は ダイアログエディターでも作ってみようと思って、コンポーネントをドラッグ&ドロップする方法を考えていた。
最初はカーソル独自画像をセットすればいいだろうと思ったんだけど、どうやら大きな画像はカーソルに出来ないらしい(縮小されてしまう)。

こりゃしょうがないなーと思って諦めかけたんだけど、ふとツールバーをフローティングさせていて、大きな四角が表示されているのに気がついた!
どうやってるのか調べてみたら、BasicToolBarUI$DragWindowでドラッグする為のウィンドウを作っていたというわけ。

この方式を使う場合、背景が透過しないのがちょっとネック。
フローティングツールバーでは、ドッキングさせる為のドラッグは背景が透過せず、ツールバー自体の移動では透過している(OSの設定を、ドラッグ時に透過させるようにしている場合)。
たぶんツールバー自体の移動はOSの機能で、ドッキングの場合は上記のDragWindowクラスを使っているんだろう。

画面に表示されている絵を画像として取得する方法は有るんだけど、これは今回の目的には使用できなかった。
すなわち、Windowの位置の画像を取得したいのだが、Windowを描画しようとする時点でその部分がクリアされてしまうらしく、描画のpaint()メソッドが呼ばれた時点では、実際に表示されている背景画像を取得できない。
また、仮に取得できたとしても、ドラッグ中の移動でもこのウィンドウがいちいち再描画されるわけではないので、移動していった先の新しい背景には切り替わらない。(これについては、再描画メソッドを呼んでやればいいだけという気もするけど)


まぁ、コンポーネントのドラッグなら、こんなウィンドウを作らなくても 直接コンポーネントの座標をドラッグに合わせて変えてやれば 動いて見えるんだけどね。
でもそうすると、元の位置に何も残らないからねぇ。


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« マウスのどのキーが押されて... | トップ | ドラッグ用透過ウィンドウ »
最新の画像もっと見る

コメントを投稿

PG(Java)」カテゴリの最新記事