Cursor Util : Cursor « Swing JFC « Java






Cursor Util

     
/*
 * @(#)CursorUtil.java  1.0 Apr 27, 2008
 *
 *  The MIT License
 *
 *  Copyright (c) 2008 Malachi de AElfweald <malachid@gmail.com>
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in
 *  all copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *  THE SOFTWARE.
 */
//package org.eoti.awt;

import java.awt.*;
import java.awt.image.*;

public class CursorUtil
{
  public enum CursorType
  {
    Crosshair(Cursor.CROSSHAIR_CURSOR),
    //Custom(Cursor.CUSTOM_CURSOR),
    Default(Cursor.DEFAULT_CURSOR),
    EastResize(Cursor.E_RESIZE_CURSOR),
    Hand(Cursor.HAND_CURSOR),
    Move(Cursor.MOVE_CURSOR),
    None(createNoCursor()),
    NorthResize(Cursor.N_RESIZE_CURSOR),
    NorthEastResize(Cursor.NE_RESIZE_CURSOR),
    NorthWestResize(Cursor.NW_RESIZE_CURSOR),
    SouthResize(Cursor.S_RESIZE_CURSOR),
    SouthEastResize(Cursor.SE_RESIZE_CURSOR),
    SouthWestResize(Cursor.SW_RESIZE_CURSOR),
    Text(Cursor.TEXT_CURSOR),
    WestResize(Cursor.W_RESIZE_CURSOR),
    Wait(Cursor.WAIT_CURSOR);

    CursorType(int type){cursor = new Cursor(type);}
    CursorType(Cursor cursor){this.cursor = cursor;}
    protected Cursor cursor;
    public Cursor getCursor(){return cursor;}
  }

  protected static Cursor createNoCursor()
  {
    try{
        return createCursor(
          GraphicsUtil.createImage(1,1),
          0,
          0,
          "NO_CURSOR"
        );
      }catch(Exception e){
        return null;
      }
  }

  public static Cursor createCursor(BufferedImage img, int hotspotX, int hotspotY, String name)
  throws IndexOutOfBoundsException, Exception
  {
    return createCursor(img, new Point(hotspotX, hotspotY), name);
  }

  public static Cursor createCursor(BufferedImage img, Point hotspot, String name)
  throws IndexOutOfBoundsException, Exception
  {
    Toolkit tk = Toolkit.getDefaultToolkit();
      Dimension d = tk.getBestCursorSize(img.getWidth(),img.getHeight());
      if(  (d.width == img.getWidth()) && (d.height == img.getHeight())  )
        return tk.createCustomCursor(img, hotspot, name);

    if((d.width + d.height) < 2)
      throw new Exception("Invalid Size");

    BufferedImage newImg = GraphicsUtil.createImage(d.width, d.height);
    Graphics2D g2 = newImg.createGraphics();
    g2.drawImage(
      img,            // what to draw
      0,              // dest left
      0,              // dest top
      newImg.getWidth(),      // dest right
      newImg.getHeight(),      // dest bottom
      0,              // src left
      0,              // src top
      img.getWidth(),        // src right
      img.getHeight(),      // src bottom
      null            // to notify of image updates
    );

    return tk.createCustomCursor(
      newImg,
      hotspot,
      name
    );
  }
}

   
    
    
    
    
  








Related examples in the same category

1.Change the cursor shape
2.Change Cursor in a thread for animation
3.Changing the Cursor