大家都知道,Java的API里有一个Cursor类,利用它可以设置鼠标光标。
在我的认识中,其设置鼠标光标时,通常有两个方面的应用:
一、设置鼠标光标类型Cursor cu = new Cursor(Cursor.WAIT_CURSOR);
setCursor(cu);其中Cursor的字段有:
CROSSHAIR_CURSOR 十字光标类型。
CUSTOM_CURSOR 与所有定制光标有关的类型。
DEFAULT_CURSOR 默认光标类型(如果没有定义光标,则获取该设置)。
E_RESIZE_CURSOR 调整窗口右边框大小的光标类型
HAND_CURSOR 手状光标类型
MOVE_CURSOR 移动光标类型
N_RESIZE_CURSOR 调整窗口上边框大小的光标类型。
NE_RESIZE_CURSOR 调整窗口右上角大小的光标类型。
NW_RESIZE_CURSOR 调整窗口左上角大小的光标类型
S_RESIZE_CURSOR 调整窗口下边框大小的光标类型。
SE_RESIZE_CURSOR 调整窗口右下角大小的光标类型。
SW_RESIZE_CURSOR 调整窗口左下角大小的光标类型。
TEXT_CURSOR 文字光标类型
W_RESIZE_CURSOR 调整窗口左边框大小的光标类型
WAIT_CURSOR 等待光标类型。
二、将自己的图片设为鼠标光标 Toolkit tk = Toolkit.getDefaultToolkit(); 
Image img = tk.getImage(Snooker.class.getClassLoader().getResource("img/c.png"));
Cursor cu = tk.createCustomCursor(img,new Point(16,16),"stick"); 
setCursor(cu);这里要说明一下createCustomCursor(Image img,Point p,String s)方法,SUN的API文档是这么说的:
创建一个新的自定义光标对象。如果要显示的图像无效,则隐藏光标(使其完全透明),并将热点 (hotspot) 设置为(0,0)。 
注意,多帧图像是无效的,可能造成此方法被挂起。 

简要说明一下它的参数:
img - 用作光标的Image对象,用作光标的Image对象高度宽度会默认伸缩成32像素。
p - 光标的热点,new Point(16,16)就是指定图标的热点为图标的中心点。
s - 光标的文字描述。
在我的实验中发现,不仅多帧图像(动画)无效,bmp格式图片也不行,更让人无法理解的是标准的光标格式cur,图标格式ico通过上述介绍的那种方法也不行!
请问各位,Java真的就不能使用标准的光标格式cur,图标格式ico作为鼠标光标吗?

解决方案 »

  1.   

    Java真的就不能使用标准的光标格式cur,图标格式ico作为鼠标光标吗?cur是Windows下的标准吧。java的光标没有具体格式,因为参数是Image,只要Image创建出来了,就能做为光标使用(图像无效,则隐藏光标)。另外Toolkit的api说了:
    getImage
    public abstract Image getImage(String filename)返回一幅图像,该图像从指定文件中获取像素数据,图像格式可以是 GIF、JPEG 或 PNG。底层工具包试图对具有相同文件名的多个请求返回相同的 Image。 
    参数:
    filename - 以可识别文件格式包含像素数据的文件名。 
    返回:
    从指定文件中获取像素数据的图像。
      

  2.   

    Up,第一次才听说Java API的Cursor类,能利用它可以设置鼠标光标。
      

  3.   

    好吧 java是跨平台的 windows以外的系统也是cur文件吗? 我不知道
      

  4.   

    bmp自然也是一样了, Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式
      

  5.   

    先不管跨不跨平台,我只是说的window系统,其他系统我也不知道。
      

  6.   

    正是因为跨平台 所以才不支持在windows里才可用的cur和bmp 而是提供在所以平台都支持的图片类型 作为cursor的图标