1

我用底部代码创建自定义光标:

Toolkit toolkit = Toolkit.getDefaultToolkit();
Image image = toolkit.getImage("C:/Users/Administrator/Desktop/gaea/core/ui/gaeawindow/src/si/xlab/gaea/core/ui/gaeawindow/HandCursor.gif");

// Somewhere in mouse pressed action

public void mousePressed(MouseEvent e)
    {
        Cursor cursor = toolkit.createCustomCursor(imageClose, new Point(12,12), "Hand");
        e.getComponent().setCursor(cursor);
    }

光标在 Mac 上显示应该是这样,但在模拟的 Windows 7 中却不是。它显示增加并且它是丑陋的。

我应该对我的代码应用什么修复/技巧来解决这个问题?这是常见的问题吗?

4

2 回答 2

1

问题是 Windows 需要 32x32 光标,如果不是,它将缩放您的图像。Mac 更灵活。

最简单的解决方案是使用透明像素将现有的 16x16 光标填充到 32x32;然后这将在两个平台上工作。

您可以使用

Toolkit.getDefaultToolkit().getBestCursorSize(w,h)

查看是否支持给定的大小。

有关详细信息,请参阅: http: //forums.sun.com/thread.jspa?threadID=5424409 ,其中还包含指向 MS 站点的链接。

于 2010-10-14T22:02:53.927 回答
0

可能是模拟 Windows 7 找不到图像文件。您应该将图像文件移动到类路径中,在您的 java 文件旁边,以便您可以使用 getClass().getResource() 加载此文件。

它应该适用于模拟的 Windows 7 和 Mac。

    public class CursorTest extends JFrame {
    public CursorTest() {

        Toolkit toolkit = Toolkit.getDefaultToolkit();
        URL url = getClass().getResource("/si/xlab/gaea/core/ui/gaeawindow/HandCursor.gif");

        Image image = null;
        try {
            image = ImageIO.read(url.openStream());
        } catch (IOException e) {
            e.printStackTrace();
        }

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Cursor cursor = toolkit.createCustomCursor(image, new Point(12, 12),
                "Hand");
        setCursor(cursor);

        setSize(new Dimension(200, 200));
        setVisible(true);
    }
}
于 2010-10-07T18:50:01.133 回答