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()メソッドで、押されたボタンの状態を知ることができます。
詳細は次のリンクで調べましょう。
←全ての『未選択』の箇所を正しく選択してから評価ボタンをクリックしてください。
(なお、全ての選択項目を一回の選択で、正しく選ばないと、次へ進めません。)