Java - 自定义游标在不同的操作系统中是不同的

时间:2010-10-02 21:02:44

标签: java swing netbeans mouse cursor

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

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中它不是。它显示出增加而且很难看。

我应该将哪些修复/技巧应用于我的代码来修复此问题?这是常见的问题吗?

2 个答案:

答案 0 :(得分:1)

问题是Windows需要32x32光标,如果不是,则会缩放图像。 Mac更灵活。

最简单的解决方案是将现有的16x16光标用透明像素填充到32x32;这将适用于两个平台。

您可以使用

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

查看是否支持给定尺寸。

有关详细信息,请参阅: http://forums.sun.com/thread.jspa?threadID=5424409 它还有一个到MS站点的链接。

答案 1 :(得分: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);
    }
}