在Swing中,有没有办法从工具包中提取预定义的鼠标光标Image?

时间:2011-08-26 22:08:07

标签: java swing mouse-cursor

当用户将鼠标悬停在可以单击以获取上下文相关帮助的对象上时,我想通过用问号“标记”内置默认鼠标光标来制作自定义帮助光标。我希望这可以很好地跨平台/外观工作(例如,与白色Windows鼠标和黑色Mac鼠标一致。)有没有办法从当前的工具包中获取光标图像,以便我可以生成一个组合的Image来设置为光标吗?

This question指出无法从Cursor对象获取信息。还有一个评论建议在JRE中钓鱼,我也尝试了一下:在谷歌图片中,我没有找到任何可以直接访问的图形文件来进行掠夺

另一种方法是添加一个mouseMoved侦听器,并在光标右侧手动绘制一下(在父节点上,我想,为了避免在边界处剪裁?)但是我有点担心开销,并且在最初的探索,这看起来非常复杂。我会采取其他建议来寻找或制作一个很好的帮助光标。 (手是最好的内置,但它并没有像帮助那样明确地说“帮助”。)

3 个答案:

答案 0 :(得分:3)

一般来说,没有。大多数游标都归平台的主机操作系统所有,但有少数游标位于$JAVA_HOME/lib/images/cursors/,例如:

$ ls -1 lib/images/cursors/
cursors.properties
invalid32x32.gif
motif_CopyDrop32x32.gif
motif_CopyNoDrop32x32.gif
motif_LinkDrop32x32.gif
motif_LinkNoDrop32x32.gif
motif_MoveDrop32x32.gif
motif_MoveNoDrop32x32.gif

答案 1 :(得分:2)

我不确定这是你的最佳解决方案,因为一个好的内置鼠标光标应该是最好的。无论如何,您可以使用鼠标监听器并根据鼠标位置在玻璃板上绘图。 Here's一个玻璃窗绘图示例。

答案 2 :(得分:0)

Java使用默认系统光标,但拖放光标除外,它使用它自己的光标。

因此,对于每个游标但DnD ,请参阅Extract cursor image in Java。必须使用JNA,并且可以轻松添加到任何Maven项目中。

对于 DnD 游标,来自trashgod的解决方案很好。 它们可以这样加载:

private static Path customSystemCursorPath = null;

public static Image loadDnDCursorImage(String cursorName) throws IOException {

    if (customSystemCursorPath == null) {
        String jhome = System.getProperty("java.home", "????");
        customSystemCursorPath = Paths.get(jhome, "lib", "images", "cursors");
    }

    // TODO change this to retrieve the cursor filename from  cursors.properties
    cursorName = "win32_" + cursorName + "32x32.gif";

    Path cursorPath = customSystemCursorPath.resolve(cursorName);

    Image image = ImageIO.read(cursorPath.toFile());
    return image;
}