マウスのドラックや移動のインターフェイス⇒MouseMotionListener

java.awt.eventにMouseMotionListenerのインターフェイスが用意されおり、 マウス動作で呼び出されるメソッドが、次のように宣言されています。

public interface MouseMotionListener extends EventListener {

    //マウスボタンを押して、コンポーネット上をドラッグすると呼び出される
    public void mouseDragged(MouseEvent e);

    //ボタンを押さずに、コンポーネット上を移動すると呼び出される
    public void mouseMoved(MouseEvent e);
}

そして、Componentクラスでは、このインターフェイスのメソッドを使い、ドラック場合や上を移動する時、 対応する上記メソッドを呼び出すように作られています。
よって、GUIの部品(Component)上でドラックした時の処理を書く場合は、 処理を書きたいクラスで、MouseMotionListenerを実装(implements)して、 これらメソッドをオーバーライドします。
そして この実装したクラスのオブジェクトを引数にして、GUIの部品(Component)オブジェクトの addMouseMotionListenerメソッドを実行させます。 (イベントが起きた時、実行すべきメソッドがどこにあるかを指定するわけです。)

java.lang.Object
 └java.awt.Component
  └java.awt.Container
   └javax.swing.JComponent
    └javax.swing.JPanel

ほとんどのGUI部品はComponentを継承したクラスなので、すべて同じように このインターフェイスの処理を作ることができます。詳細は次のリンクで調べましょう。

マウスドラックでの描画処理

前のページで作成したPaintPanelのパネルの上でマウスをドラックしたら、 ドラックさせた移動位置の点と、原点(座標:0,0)を結ぶ線を、赤で描きます。

マウスドラックの処理は、どのクラスに書いても良いのですが、 次のPaintPanelのパネルクラスに 書くのが分かりやすいでしょう。
このパネルクラス上でドラックの処理だからです。以下に変更したコードを示します。

package paint;
import java.awt.*;//Point、Color Graphicsなどのパッケージ
import javax.swing.*;//JPanelのパッケージ
import java.awt.event.*;//MouseMotionListenerなどのリスナーや、MouseEventなどのイベント用

//描画対象のパネル
public class PaintPanel extends JPanel implements MouseMotionListener
{

	public PaintPanel() {
		this.addMouseMotionListener(this);//このクラスに実装したインターフェイスを自身にセット
	}

	//描画すべきタイミングで、呼び出されるメソッド
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		
		Color color1 = new java.awt.Color(0x99, 0, 0x0FF);//RGBの色を指定して色を作成
		
		g.setColor(color1);//描画色設定

		g.drawRect(5, 5, 200, 100);//(5,5)が左上隅の座標で、幅200、高さ100の長方形描画
		g.drawOval(5, 5, 200, 100);//(5,5)が左上隅の座標で、幅200、高さ100の楕円描画

	}
	
	//指定コンポーネントの上で、マウスのボタンを押してドラッグすると呼び出されます。 
	public void mouseDragged(MouseEvent e){
		Point p = e.getPoint();//ドラックした所の座標取得
		System.out.println(p.x + "," + p.y );//この行はデバック用で、完成後は削除
		
		Graphics g = this.getGraphics();//描画ツール取得
		g.setColor(new Color(255, 0, 0)); //赤	
		g.drawLine(0, 0, p.x, p.y); //座標原点とドラック座標を結ぶ線を描画
	}

	//ボタンを押さずに、マウスを指定コンポーネントで移動すると呼び出されます。 
	public void mouseMoved(MouseEvent e) {

	}
}

上記MouseMotionListener用メソッドの引数であるMouseEventオブジェクトから、 マウスがドラックや移動後の現在座標をgetPoint()で取得していますが、 他にもgetButton()メソッドで、押されたボタンの状態を知ることができます。 詳細は次のリンクで調べましょう。




←全ての『未選択』の箇所を正しく選択してから評価ボタンをクリックしてください。
(なお、全ての選択項目を一回の選択で、正しく選ばないと、次へ進めません。)