在Swing中,是否有一种方法可以从工具包中提取预定义的鼠标光标Image ?



我想创建一个自定义帮助光标,当用户将鼠标悬停在一个对象上时,用问号标记内置的默认鼠标光标,可以单击该对象获得上下文敏感的帮助。我希望这能在不同平台/外观和感觉上很好地工作(例如,看起来与白色Windows鼠标和黑色Mac鼠标一致)。是否有一种方法可以从当前Toolkit中获取光标图像,以便我可以生成一个组合图像来设置为光标?

这个问题指出不能从Cursor对象中获得信息。还有一条评论建议在JRE中查找,我也尝试了一下:在JRE和google images中,我没有找到任何可以直接访问的图形文件来掠夺

另一种方法是添加一个mouseMoved监听器,并在光标的右侧手动绘制一点(我想是在父元素上,以避免在边界处剪切?),但我有点担心开销,并且在最初的探索中,这看起来非常复杂。我也会采纳其他关于寻找或制作一个好的帮助光标的建议。(手势是最好的内置功能,但它不像问号那样清晰地显示"帮助"。)

一般来说,没有。大多数游标由平台的主机操作系统拥有,但也有一些存在于$JAVA_HOME/lib/images/cursors/中,例如:

<>之前$ ls -1 lib/images/cursors/cursors.propertiesinvalid32x32.gifmotif_CopyDrop32x32.gifmotif_CopyNoDrop32x32.gifmotif_LinkDrop32x32.gifmotif_LinkNoDrop32x32.gifmotif_MoveDrop32x32.gifmotif_MoveNoDrop32x32.gif

我不确定这是您的情况下最好的解决方案,因为一个好的内置鼠标光标应该是最好的。无论如何,您可以使用鼠标侦听器并根据鼠标位置在玻璃窗格上绘制。下面是一个玻璃板绘图的例子。

Java使用默认的系统游标,除了拖放游标,它使用自己的游标。

所以对于除DnD以外的所有游标,请参考Java中提取游标图像。必须使用JNA,并且可以很容易地添加到任何Maven项目中。

对于DnD游标,垃圾处理系统的解决方案是好的。它们可以这样加载:

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;
}

最新更新