ともさんのHP >プロブラミング >マウスカーソルをイメージに差し替え

マウスカーソルをマウスイベント毎に変更

自作のJavaアプリの使い方を説明する動画を作ろうと思ったのですが、動画だけではマウスのどのボタンを押したのか、見せることができません。
そこで、マウスカーソルをマウスイメージに置き換え、マウスキーやホイールを操作するごとにイメージを差し替えてマウスの操作状況をわかるようにしようと考えました。
マウスカーソルをイメージに差し替えるのは簡単だったのですが、マウスの操作イベントでイメージを差し替えるのは大変でした。

広告

なぜなら、 Java 楽天 のイベントはコンポーネントごとに設定しなければいけないので、 パネル、ボタン楽天 ...とマウスが上に乗るコンポーネントすべてにイベントを設定しなければいけません(普通は)。

フレーム上のすべての場所でマウスイベントを一括して設定する方法

よく調べてみたら、うまく設定する方法がありましたが、ネット上にわかりやすい情報がなかったので上げておきます。
マウスイベントだけでなく、キーイベントでも設定できます。
Toolkit.addAWTEventListener()を利用します。下のソースでは、設定したフレーム内であればマウスカーソルが変わってくれます。
動画で見るとこんな感じ

ソースは下記になります。

package tomojavalib.test;

import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import tomojavalib.p2cad.Frame;

public class MouseCursor extends JFrame{
Cursor cc=null;
Cursor cd=null;
Cursor cu=null;
Cursor cl=null;
Cursor cr=null;
Cursor ch=null;
JPanel p = null;
JButton button = null;

public MouseCursor()
{
 p = new JPanel();
 p.setBackground(Color.WHITE);
 button = new Jbutton( "test" );
 p.add( button );
 Container contentPane = getContentPane();
 contentPane.add( p, BorderLayout.CENTER ); 
 mouseHenkou(); 
 initEventListener();
}

public static void main(String[] args) {
 MouseCursor m = new MouseCursor();
 m.setSize(640,480);
 m.setBackground(Color.WHITE);
 m.setVisible(true);
}

public void mouseHenkou() {
java.io.File f = null;
Image img=null;
Image imgd=null;
Image imgu=null;
Image imgl=null;
Image imgr=null;
Image imgh=null;
/*ファイル読み込み*/
try {
 f = new java.io.File( "Z:\\work\\java\\tomojavalib\\src\\tomojavalib\\p2cad\\mouse.jpg" );
 img = (Image)javax.imageio.ImageIO.read( f );
 f = new java.io.File( "Z:\\work\\java\\tomojavalib\\src\\tomojavalib\\p2cad\\mouse-d.jpg" );
 imgd = (Image)javax.imageio.ImageIO.read( f ); 
 f = new java.io.File( "Z:\\work\\java\\tomojavalib\\src\\tomojavalib\\p2cad\\mouse-u.jpg" );
 imgu = (Image)javax.imageio.ImageIO.read( f );
 f = new java.io.File( "Z:\\work\\java\\tomojavalib\\src\\tomojavalib\\p2cad\\mouse-l.jpg" );
 imgl = (Image)javax.imageio.ImageIO.read( f );
 f = new java.io.File( "Z:\\work\\java\\tomojavalib\\src\\tomojavalib\\p2cad\\mouse-r.jpg" );
 imgr = (Image)javax.imageio.ImageIO.read( f );
 f = new java.io.File( "Z:\\work\\java\\tomojavalib\\src\\tomojavalib\\p2cad\\mouse-h.jpg" );
 imgh = (Image)javax.imageio.ImageIO.read( f ); 
}catch (Exception e) {  e.printStackTrace(); }  
cc = Toolkit.getDefaultToolkit().createCustomCursor(img, new java.awt.Point(), "");
cd = Toolkit.getDefaultToolkit().createCustomCursor(imgd, new java.awt.Point(), "");
cu = Toolkit.getDefaultToolkit().createCustomCursor(imgu, new java.awt.Point(), "");
cl = Toolkit.getDefaultToolkit().createCustomCursor(imgl, new java.awt.Point(), "");
cr = Toolkit.getDefaultToolkit().createCustomCursor(imgr, new java.awt.Point(), "");
ch = Toolkit.getDefaultToolkit().createCustomCursor(imgh, new java.awt.Point(), "");
this.setCursor(cc);
return;


private void initEventListener() {
 Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
  public void eventDispatched(AWTEvent event) {
   if(event.getID() == MouseWheelEvent.MOUSE_WHEEL) {
    MouseWheelEvent e = (MouseWheelEvent) event;
    if( e.getWheelRotation()>0 ){ setCursor( "d" ); }else{ setCursor( "u" ); }
   }
   if(event.getID() == MouseEvent.MOUSE_MOVED) { setCursor( "c"); }
   if(event.getID() == MouseEvent.MOUSE_PRESSED) {
   MouseEvent e = (MouseEvent)event;
    if( e.getButton()==MouseEvent.BUTTON1 ){setCursor( "l");}
    if( e.getButton()==MouseEvent.BUTTON2 ){setCursor( "h");}
    if( e.getButton()==MouseEvent.BUTTON3 ){setCursor( "r");}
   }
  }
 }, AWTEvent.MOUSE_MOTION_EVENT_MASK | AWTEvent.MOUSE_WHEEL_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK);
}

private void setCursor( String s ){
 System.out.println("イベント");
if( s.equals("d") ){ this.setCursor(cd); }
else if( s.equals("u") ){ this.setCursor(cu); }
else if( s.equals("c") ){ this.setCursor(cc); }
else if( s.equals("r") ){ this.setCursor(cr); }
else if( s.equals("l") ){ this.setCursor(cl); }
else if( s.equals("h") ){ this.setCursor(ch); }
}

}

最終更新日: 2014-08-25 14:39:46

ともさんのHP >プロブラミング >マウスカーソルをイメージに差し替え

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

ツバキの栽培、手入れ、増やしかた  
柿の剪定道具  
新旧文化式とドレメ式原型製図を比較  
玉縁ボタンホールの縫い方  
キャスケット型紙の設計方法と型紙ダウンロード  
重箱式巣箱の図面  
ブルーベリーの挿し木  
ホオノキ  
アリジゴクの飼いかた  
シンプルなパネルラインワンピースの型紙と作りかた  
ベジェ曲線の原理  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます