画像のクリックを検出する方法(JDK1.4.1)
フレームのpaintメソッド内で直接画像をdrawImageするのではなく、
画像を表示するためのコンポーネントを用意して、そのコンポーネントを
フレームにaddしてやるところがポイント。
・ソース
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* 画像のクリックを検出するサンプル。
* 画像がクリックされたら、何番目の画像がクリックされたかをポップアップ表示する。
*/
public class ImageClick{
public static void main(String[] args){
ImageClickFrame frame = new ImageClickFrame();
frame.show();
}
}
/**
* 画像クリック検出サンプル。
* フレームクラス。
*/
class ImageClickFrame extends JFrame{
/** 画像の数 */
private final int IMAGE_COUNT = 3;
/** 表示する画像 */
private Image[] image;
/** 画像を貼り付けるコンポーネント */
private ImageClickComponent[] component;
/** マウスアダプタ */
MouseAdapter mouseAdapter = new MouseAdapter(){
public void mouseClicked(MouseEvent e){
clicked(e);
}
};
/**
* コンストラクタ
*/
public ImageClickFrame(){
// Window を閉じる為のリスナ
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
// マウスリスナを登録
getContentPane().addMouseListener(mouseAdapter);
// サイズ設定
setSize(150, 150);
// 背景色設定
getContentPane().setBackground(Color.white);
// レイアウト設定
getContentPane().setLayout(new FlowLayout());
// 画像読み込み
image = new Image[IMAGE_COUNT];
component = new ImageClickComponent[IMAGE_COUNT];
Toolkit tk = Toolkit.getDefaultToolkit();
for(int i = 0 ; i < IMAGE_COUNT ; i++){
// 画像読み込み
image[i] = tk.getImage("image" + (i + 1) + ".png");
// 画像表示用コンポーネント作成
component[i] = new ImageClickComponent(image[i]);
// コンポーネントをフレームに追加
getContentPane().add(component[i]);
}
}
/**
* マウスがクリックされた時の処理
* @param e マウスイベント
*/
private void clicked(MouseEvent e){
for(int i = 0 ; i < IMAGE_COUNT ; i++)
{
// コンポーネントの表示位置を取得する
Rectangle rect = null;
rect = component[i].getBounds(rect);
// コンポーネントの表示位置内でマウスがクリックされていたら
if (rect.contains(e.getX(), e.getY())){
JOptionPane.showMessageDialog(this, (i+1)+"番目をクリック");
}
}
}
}
/**
* 画像表示用のコンポーネント。
* コンストラクタで画像を受け取り、paintメソッドでそれを表示するだけ。
*/
class ImageClickComponent extends JComponent{
/** 表示する画像 */
private Image image;
/**
* コンストラクタ
* @param i 表示する画像
*/
public ImageClickComponent(Image i){
super();
image = i;
Dimension dim = new Dimension(50, 50);
this.setSize(dim);
this.setPreferredSize(dim);
}
/**
* 描画処理。
* @param g Graphicsオブジェクト
*/
public void paint(Graphics g){
g.drawImage(image, 0, 0, this);
}
}
・画像
(image1.png)
(image2.png)
(image3.png)