アプリ版:「スタンプのみでお礼する」機能のリリースについて

JPanelに
MouseMotionListenerをつけて、
マウスが動くたびに、
mouseMovedを呼び出して、マウスの座標を
getX()と、getY()
を使って、取得するようなプログラムを作ったのですが、

JPanel上にJLabelを何枚か配置しており、
マウスが、JLabelの上に来ると、mousuMovedが認識できません。

ちなみに、JLabelにもmouseMovedをつけると、
取得する座標が、JLabel上の座標になってしまいます。

JPanel上の座標をJLabelの上にマウスが来ても正確に取得するにはどうしたらいいでしょうか?

A 回答 (2件)

// 一応自分で計算しなくてもそういうの用意されているみたいね。


// http://download.oracle.com/javase/7/docs/api/jav …

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Hello extends JFrame implements MouseMotionListener{

public Hello(){
JLabel label1 = new JLabel("Hello, World!");
label1.setBackground(java.awt.Color.GREEN);
label1.setOpaque(true);

JLabel label2 = new JLabel("Hello, World!");
label2.setBackground(java.awt.Color.RED);
label2.setOpaque(true);
label2.addMouseMotionListener(this);

setLayout(new GridLayout(1, 2));
getContentPane().add(label1);
getContentPane().add(label2);

setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setLocationRelativeTo(null);
}

public void mouseDragged(MouseEvent e){
}
public void mouseMoved(MouseEvent e){
setTitle(Double.toString(SwingUtilities.convertPoint((Component)e.getSource(), e.getX(), e.getY() ,this ).getX()));
}

public static void main(String[] args) {
Hello h1 = new Hello();
h1.setVisible(true);
}


}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

convertPointという機能を使うということですね。
大変有効な方法です。

お礼日時:2011/04/18 11:34

>ちなみに、JLabelにもmouseMovedをつけると、


>取得する座標が、JLabel上の座標になってしまいます。

JLabelの位置はわかるのですから、取得した座標に加算すればいいだけではないでしょうか。

あるいは、JPanelだけですべて処理したいのであれば、JLabelを使わず、すべてグラフィックとして描画し処理する、という形になるでしょう。JLabelを使っている理由が、単純にテキストを表示するだけということなら、描画に置き換えてもそれほど大変ではないように思えます。
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。

お礼日時:2011/04/18 11:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!