- - PR -
JFrameとMouseMotionListenerのMouseEventで座標がずれる
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-11-15 17:15
こんにちわいつも勉強させていただいています。
JFrameに画像を表示させて、お絵かきのような事をしたいのですが、MouseEventから帰ってくる座標がずれてしまっています。 調べてみましたが、原因が分かりませんので、どなたかご存知方がいらっしゃいましたらご教授よろしくお願いします。 | ||||
|
投稿日時: 2006-11-15 17:44
どれくらいずれていますか? | ||||
|
投稿日時: 2006-11-15 17:52
お返事ありがとうございます。
目算になりますが、x座標はずれてないように思えます。 y座標がJFrameのタイトルが表示される部分の幅くらいずれています。 よろしくお願いします。 | ||||
|
投稿日時: 2006-11-15 18:16
イベントリスナの設定場所を誤っているのでは。 JPanelかなにかをJFrameに表示しているのでしょうが、 リスナをJPanelではなくJFrameに登録しているというオチではないでしょうか。 | ||||
|
投稿日時: 2006-11-15 18:17
JFrameにJComponentを子要素として持たせ、そのJComponentに描画を行えばOK
| ||||
|
投稿日時: 2006-11-15 23:35
お返事ありがとうございます。
お二人に指摘していただいた通りでした。 申し訳ありませんでした。ありがとうございました。 | ||||
|
投稿日時: 2006-11-18 03:27
解決しているようですが、
MouseEventから返ってくる座標がずれているように考える本質的な原因は、MouseListenerの設定位置ではなく、MouseEventの座標をコンポーネントの 相対座標に変換していないからです。 NullLayoutではなく、LayoutManagerを使用している場合、 MouseEvent.getSource()のコンポーネントの座標をMouseEventで座標を使用する コンポーネントの相対座標に変換する必要があります。 座標の変換にはSwingUtilities.convert系メソッドあたりを使用します。 MouseListenerとMouseEventが同一コンポーネントで使用することが多いと思いますが、 AWT,Swingを使いこなそうとすると、Hackが必要なことが多くなります。 Hackが必要になった場合、座標を変換することを知っていると良いでしょう。 |
1