トップページ > 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座標が表示されます。
ドラッグすると,“(ドラッグ中)”と表示されます。