MouseListnerの実装
マウスのイベントを取得するためにはMouseListenerを利用する。MouseListenerはImageCanvasで実装する
public class hoge extends PlugInFrame {
public static icMouseAdapter ima;
public static ImagePlus imp;
...
public hoge() {
imp = WindowManager.getCurrentImage();
ImageCanvas ic = imp.getCanvas();
ic.addMouseListener(ima = new icMouseAdapter(imp));
...
}
}
ij.WindowManager.getCurrentImage()
を使うと、現在アクティブな画像のImagePlusオブジェクトを取得することができる。
MouseAdapterクラス
ImageCanvasオブジェクトを取得したのち、
addMouseListener
メソッドで実装する。ここでインスタンスしているicMouseAdapterは以下のようなクラスになる。
public class icMouseAdapter extends MouseAdapter implements Measurements {
...
public ImagePlus imp;
public icMouseAdapter(ImagePlus imp) {
this.imp = imp;
}
public void mouseClicked(MouseEvent e) {
}
}
MouseAdapterクラスは、マウスイベントを受け取るための抽象アダプタクラスである。マウスのイベントには当然ほかにもいろいろあるが(ドラッグとかホイールの回転とか)、この場合継承しているのでinterfaceと違い、すべてのメソッドを実装する必要はない。
メソッドのパラメータ
MouseEvent e
を使えば、マウスの座標情報を得ることができる。
int x = e.getX();
int y = e.getY();
ただし、もし画像が拡大・縮小されていた場合、マウスをクリックした場所の座標データを取得すると、本当に欲しい画像上の座標ではなく、拡大・縮小された画像での座標を取得することになってしまう。そこで、
ImageCanvas.offScreenX(int x)
を使う。
int x = ic.offScreenX(e.getX());
int y = ic.offScreenY(e.getY());
これで、マウスがクリックされた場所の座標データを取得することができる。
MouseListenerインターフェース
一方、Interfaceを使ってマウスイベントの取得方法を使うこともできる。
public class icMouseAdapter implements MouseListener, Measurements {
...
public ImagePlus imp;
public icMouseAdapter(ImagePlus imp) {
this.imp = imp;
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
}
MouseListenerはInterfaceなので、使わないメソッドもすべて実装する必要があるが、もしほかのクラスを継承したいために
MouseAdapter
が使えない(多重継承できないため)場合には、このInterfaceが使える。
プラグインが終わるなどしてMouseListenerの取り除く場合は
ic.removeMouseListener(ima);
としてやればよい(ImageListenerの場合と同じようにする)。
以上