MousePosition | サンプルソース | |
---|---|---|
マウスカーソルの動きを追跡せよ! マウスイベント処理の基本中の基本です。
|
MousePosition.java |
/** * 愛のJava256本ノック for Java 5.0 * Javaサンプルソース ver0.2C "MousePosition" * MousePosition.java 「マウスイベントでカーソルの座標を取得」 * * 2005/09/23 制作:安永ノリカズ * * 【コンパイル&実行方法】 * >javac MousePosition.java * >java MousePosition * 【キーワード】 * インターフェース(interface), implements(実装), * MouseListener, MouseMotionListener * * 【試してみよう】 * マウスドラッグ中は文字の色を変えて座標を表示する。 * マウスカーソルが端っこに行っても文字が画面からはみ出さないようにする。 * MouseMotionAdapterでイベントを処理する。 * * */ import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.Toolkit; import java.lang.String; import java.lang.System; import javax.swing.JFrame; import javax.swing.JPanel; public class MousePosition extends JFrame { public MousePosition() { add(new DrawPanel()); } public static void main(String[] A00) { Toolkit.getDefaultToolkit().setDynamicLayout(true); JFrame L00 = new MousePosition(); L00.setTitle("マウスの座標を表示"); L00.setDefaultCloseOperation(EXIT_ON_CLOSE); L00.setBackground(Color.white); L00.setSize(320, 240); L00.setVisible(true); } } class DrawPanel extends JPanel implements MouseMotionListener { int I00; int I01; public DrawPanel() { setBackground(Color.white); addMouseMotionListener(this); } public void paintComponent(Graphics A00) { super.paintComponent(A00); String L00 = String.format("(%d, %d)", I00, I01); A00.drawString(L00, I00, I01); } public void mouseMoved(MouseEvent A00) { I00 = A00.getX(); I01 = A00.getY(); repaint(); } public void mouseDragged(MouseEvent A00) {} } /* ■ クラスの外でちょっと一言 ■ マウスイベントのリスナーには、MouseListenerとMouseMotionListenerがありま す。MouseListenerはマウスのボタン操作、コンポーネントへの出入りに対応 し、MouseMotionListenerはカーソルの移動、ドラッグの追跡に対応します。 このプログラムのポイントはrepaint()ですね。マウスカーソルの移動を検知し たら、クラス変数にその座標を代入し、自分自身の再描画要求を出してます。そ うすると、後でpaintComponentが呼ばれ、カーソルの位置に文字が描画される仕 組みです。 マウスモーションは短時間に非常にたくさん発生するのイベントですので、 mouseMovedメソッド、mouseDraggedメソッドに重い処理を記述することは避ける べきでしょう。 */