トップページ > Java3D入門 > Javaのマウス入力(3)

カーソル位置を取得する

座標を表示できるようにします。

前ページ ではマウス関係のインターフェースを実装する方法を確認しました。 大まかな働きが分かったところで,実用に向けてマウスカーソルの座標を取得できるようにします。 とは言ってもたいしたことはやらないのですが。。。

ここでは,ウィンドウ上のマウス座標を表示するプログラムを作ります。 マウスの座標はウィンドウ上に貼り付けた「ラベル」に表示することにします。 今回はマウスの動きだけを検出できれば良いので,mouseMotionListener だけを実装します。

mouseMotionListenerを実装するクラスと,全体のウィンドウを含むクラスの絡みについてですが, 今回は下図のように「ウィンドウ全体のクラス内にマウス用クラスを含めてしまう」という形にします。 ウィンドウ用クラスはJFrameを継承した“mouse_Frame”というクラスにします。 また,マウス用のクラスはmouseMotionListenerを実装した“mouse_class”というクラスにしてあります。

メインクラスでは,mainメソッド内でmouse_Frameクラスを実体化させるだけなので非常に短いコードになっています。

ソースコード: mouse_Frame.java

//******************************************************************************
//マウス入力のためのクラス“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

//******************************************************************************
//“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座標が表示されます。

ドラッグすると,“(ドラッグ中)”と表示されます。




前へ   次へ