ともさんの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); }
}

}

最終更新日: 2018-12-21 08:44:39

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

広告
新着ページ

AIを利用し、衣服のデザイン画から型紙を制作する方法  
2つのアパレル3D技術でひらくオーダーメイド生産の手法  
【洋裁型紙】前後身頃の肩の傾きは何故前身頃の方が傾いているのか  
電子追尾式天体写真撮影法  
日本ミツバチ巣箱の種類  
ドラフター(製図台)でソーイング  
日本ミツバチが逃亡  
カメさんの箱庭  
天体用デジタルカメラの構造と天体写真  
Javaで静止画像(Jpeg)を動画(Mov)に変換  
USBカメラをJAVAで制御  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

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