- PR -

JFrameとMouseMotionListenerのMouseEventで座標がずれる

1
投稿者投稿内容
くれよん
ベテラン
会議室デビュー日: 2005/04/28
投稿数: 74
投稿日時: 2006-11-15 17:15
こんにちわいつも勉強させていただいています。

JFrameに画像を表示させて、お絵かきのような事をしたいのですが、MouseEventから帰ってくる座標がずれてしまっています。

調べてみましたが、原因が分かりませんので、どなたかご存知方がいらっしゃいましたらご教授よろしくお願いします。
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2006-11-15 17:44
引用:

くれよんさんの書き込み (2006-11-15 17:15) より:
JFrameに画像を表示させて、お絵かきのような事をしたいのですが、MouseEventから帰ってくる座標がずれてしまっています。


どれくらいずれていますか?
くれよん
ベテラン
会議室デビュー日: 2005/04/28
投稿数: 74
投稿日時: 2006-11-15 17:52
お返事ありがとうございます。

目算になりますが、x座標はずれてないように思えます。
y座標がJFrameのタイトルが表示される部分の幅くらいずれています。
よろしくお願いします。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-11-15 18:16
引用:

くれよんさんの書き込み (2006-11-15 17:52) より:
目算になりますが、x座標はずれてないように思えます。
y座標がJFrameのタイトルが表示される部分の幅くらいずれています。



イベントリスナの設定場所を誤っているのでは。
JPanelかなにかをJFrameに表示しているのでしょうが、
リスナをJPanelではなくJFrameに登録しているというオチではないでしょうか。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2006-11-15 18:17
JFrameにJComponentを子要素として持たせ、そのJComponentに描画を行えばOK
くれよん
ベテラン
会議室デビュー日: 2005/04/28
投稿数: 74
投稿日時: 2006-11-15 23:35
お返事ありがとうございます。

お二人に指摘していただいた通りでした。
申し訳ありませんでした。ありがとうございました。
nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2006-11-18 03:27
解決しているようですが、
MouseEventから返ってくる座標がずれているように考える本質的な原因は、MouseListenerの設定位置ではなく、MouseEventの座標をコンポーネントの
相対座標に変換していないからです。

NullLayoutではなく、LayoutManagerを使用している場合、
MouseEvent.getSource()のコンポーネントの座標をMouseEventで座標を使用する
コンポーネントの相対座標に変換する必要があります。

座標の変換にはSwingUtilities.convert系メソッドあたりを使用します。

MouseListenerとMouseEventが同一コンポーネントで使用することが多いと思いますが、
AWT,Swingを使いこなそうとすると、Hackが必要なことが多くなります。
Hackが必要になった場合、座標を変換することを知っていると良いでしょう。
1

スキルアップ/キャリアアップ(JOB@IT)