トップページ > Java3D入門 > Javaのマウス入力(3)
前ページ ではマウス関係のインターフェースを実装する方法を確認しました。 大まかな働きが分かったところで,実用に向けてマウスカーソルの座標を取得できるようにします。 とは言ってもたいしたことはやらないのですが。。。
ここでは,ウィンドウ上のマウス座標を表示するプログラムを作ります。 マウスの座標はウィンドウ上に貼り付けた「ラベル」に表示することにします。 今回はマウスの動きだけを検出できれば良いので,mouseMotionListener だけを実装します。
mouseMotionListenerを実装するクラスと,全体のウィンドウを含むクラスの絡みについてですが, 今回は下図のように「ウィンドウ全体のクラス内にマウス用クラスを含めてしまう」という形にします。 ウィンドウ用クラスはJFrameを継承した“mouse_Frame”というクラスにします。 また,マウス用のクラスはmouseMotionListenerを実装した“mouse_class”というクラスにしてあります。
メインクラスでは,mainメソッド内でmouse_Frameクラスを実体化させるだけなので非常に短いコードになっています。
//****************************************************************************** //マウス入力のためのクラス“mouse_Frame” // //JFrameを継承 //MouseListenerとMouseMotionLisenerとMouseWheelListenerを実装 // //フレームとマウス座標を表示するラベルを1つにまとめたクラス // //****************************************************************************** //インポート import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class mouse_Frame extends JFrame { //============================================================================= //クラスのフィールド //座標を保存しておく変数 int x, y; //座標を表示するためのラベル JLabel x_label,y_label; //============================================================================= //コンストラクタ(引数はタイトルとフレームの寸法) public mouse_Frame(String title, int x_size, int y_size) { //============================================================================ //ウィンドウ全般の設定 //============================================================================ //サイズ設定 setSize(x_size, y_size); //タイトル設定 setTitle(title); //ウィンドウを閉じる動作の登録 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //============================================================================ //マウス位置を表示するためのラベル設定 //============================================================================ //ラベルのフォントを作っておく(フォントはMS ゴシック,太さは普通, 文字サイズは20pt) Font font = new Font("MS ゴシック", Font.PLAIN, 20); //X座標を表示するラベル x_label = new JLabel(); x_label.setFont(font); x_label.setText("X座標: 0"); //Y座標を表示するラベル(フォントはArial,文字サイズは14pt) y_label = new JLabel(); y_label.setFont(font); y_label.setText("Y座標: 0"); //============================================================================ //コンテントペインの設定 //============================================================================ //インスタンス化 JPanel cp = new JPanel(); //ラベルをコンテントペインへ登録 cp.add(x_label); cp.add(y_label); //コンテントペインをフレームへ登録 setContentPane(cp); //レイアウトは手動 cp.setLayout(null); //ラベルの寸法を設定 x_label.setBounds(5,5,300,24); y_label.setBounds(5,55,300,24); //============================================================================ //マウスの設定 //============================================================================ //マウス入力用のクラス,mouse_classをインスタンス化 mouse_class mouse = new mouse_class(); //このフレームにマウス入力クラスを登録 addMouseMotionListener(mouse); } //***************************************************************************** //mouse_class:マウス入力用のクラス //***************************************************************************** class mouse_class implements MouseMotionListener { //============================================================================ //マウスが動かされた時に呼ばれるメソッド //============================================================================ public void mouseMoved(MouseEvent event) { //現在のx座標を取得 x = event.getX(); y = event.getY(); //ラベルのテキストを現在座標にする x_label.setText("X座標: " + Integer.toString(x)); y_label.setText("Y座標: " + Integer.toString(y)); } //============================================================================ //マウスがドラッグされた時に呼ばれるメソッド //============================================================================ public void mouseDragged(MouseEvent event) { //現在のx座標を取得 x = event.getX(); y = event.getY(); //ラベルのテキストを現在座標にする x_label.setText("X座標(ドラッグ中): " + Integer.toString(x)); y_label.setText("Y座標(ドラッグ中): " + Integer.toString(y)); } } }
//****************************************************************************** //“mouse_test2.java” //マウス入力クラスのための、テストプログラム(2) //ウィンドウのラベルにマウスの座標を表示 //****************************************************************************** public class mouse_test2 { //============================================================================= //メイン・メソッド public static void main(String[] args) { //mouse_Frameクラスをインスタンス化 mouse_Frame frame = new mouse_Frame("mouse_test2", 500, 500); //フレームを可視化 frame.setVisible(true); } }
“mouse_Frame.java” と,“mouse_test2.java”の両方をコンパイルして, “mouse_test2”の方を実行します。
ウィンドウ上でマウスを動かすと,下のようにX座標とY座標が表示されます。
ドラッグすると,“(ドラッグ中)”と表示されます。