在Java中如何调整光标大小

3

是否有可能通过createCustomCursor()方法创建一个比Windows预定义的32x32更大的光标(例如64x64甚至更大)?

Toolkit toolkit = Toolkit.getDefaultToolkit();
final Image cursor = toolkit.getImage(getClass().getClassLoader().getResource("images/cursor.png"));
toolkit.getBestCursorSize(64, 64);
Cursor mycursor=toolkit.createCustomCursor(cursor, new Point(0,0), "cursor");
setCursor(mycursor);

我尝试了以下操作:
 Cursor emptyCursor = Toolkit.getDefaultToolkit().createCustomCursor(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB), new Point(0, 0), "empty"); 
        setCursor(emptyCursor);

        this.addMouseMotionListener(new MouseMotionListener(){
            public void mouseDragged(MouseEvent e) {
            }

            public void mouseMoved(MouseEvent e) {
                xCursor = e.getX();
                yCursor = e.getY();
                repaint();
                //e.consume();
            }
        });

 public void paint( Graphics g ) {
           g.drawImage(cursor, xCursor, yCursor, null);
       }

但是它不起作用,整个图形用户界面消失了,并且光标在每个点处都被绘制,所以我必须以某种方式将其删除?

你试过之后发生了什么情况?为了更快获得帮助,请发布一个 SSCCE - Andrew Thompson
实际上,上面的代码使用Windows创建了一个大小为32x32的光标。我想知道是否存在一种更有效的方法来编程一个更大的光标!? - processWatcher
解决了 - processWatcher
2个回答

1
有没有一种方法可以使光标小于预定义的32x32?如果可以的话,只需制作一个非常小的光标,以至于它几乎不会被注意到,或者制作一个透明的光标...然后,每个(在此处插入所需的时间间隔)移动图像到光标当前位置的坐标。

1
Windows 似乎只允许使用 32x32 像素大小的光标,所以如果您想要其他大小的光标,则需要绕过此限制。
为了制作一个更大的光标,我认为以下步骤可以实现:
1. 创建一个完全透明的自定义光标。 2. 使用 mouseMotionListener 获取光标的位置。 3. 在真实(透明)光标的位置上绘制您的光标图像。

有更有效率的编程方法吗?因为每次鼠标移动就重新绘制图像是低效的! - processWatcher
这个简化版本对我来说似乎有效(创建了一个不可见的光标):Cursor emptyCursor = Toolkit.getDefaultToolkit().createCustomCursor(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB), new Point(0, 0), "empty"); frame.setCursor(emptyCursor); - syb0rg
那不是问题。在我的例子中,我使用了图像cursorBlank来实现这个功能。但我可能遇到的问题在于addMouseMotionListener()。 - processWatcher
在绘制新的自定义光标之前,您必须隐藏光标。 - syb0rg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接