- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Draw2Dでのイベント検知)
Draw2Dでのイベント検知
このQ&Aのポイント
- SWT + GEF(Draw2D)を使用してGUIアプリケーションを作成しています。
- FigureCanvasにPanelを張り、その上にFigureを追加し、マウスドラッグによるFigureの移動機能を実装しようと試行錯誤しています。
- LabelにMouseListenerを登録して移動するラベルを検知し、MouseMotionListenerをPanelに登録してドラッグを実現させましたが、カーソルがLabel上にある時にイベントを検知できず、カクカクした動きになっています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
実験してないので自信なし。 (SWT環境もってないので) --- mousePressed(MouseEvent e)ハンドラ内部で「e.consume()」してあげると、 あとは"普通に"、 (図形のドラッグ)処理を書けばいいみたい。 http://www13.plala.or.jp/observe/draw2d/draw2d_event.html --- 自信ないのですが、 ソースコードをなんとなく読んだ限りでは、 mousePressed(MouseEvent e)ハンドラ内部で「e.consume()」してあげると 『そのpressされた図形をキャプチャ(※以後のドラッグ操作を追跡監視)する』 みたいです。 (※追跡対象になった図形は、そのドラッグ中(追跡中)に、 たとえマウスがその図形の領域を外れても、マウスイベントは 相変わらずその図形に対し発生する…といったところかな?) この「マウスpress時の明示的キャプチャ」をプログラマがやらない場合、 マウスを動かした際に、 「その瞬間に、マウスカーソルに最も近い図形が その都度キャプチャされる」 みたいです。 (Java swingの場合は、何もやらなくても、 マウス押下された図形が自動的に「ドラッグ追跡(監視)対象」になるっぽい) --- 参考資料: ・ここ http://www13.plala.or.jp/observe/draw2d/draw2d_overview.html の「LightweightSystem」の説明。 ・LightweightSystem.java ・SWTEventDispatcher.java
お礼
詳しいご解説&URLが大変参考になりました。 consume()はそのような役割があったのですね。 おかげさまで無事解決することが出来ました。 ありがとうございます。