I'd like to make a custom help cursor by "badging" the built-in default mouse cursor with a question mark when the user is hovering over an object that can be clicked for context-sensitive help. I'd like this to work nicely across platforms/look-and-feels (to look consistent with the white Windows mouse and the black Mac mouse, for instance.) Is there a way to get the cursor Image from the current Toolkit so that I could generate a combined Image to set as the cursor?
This question points out that the information can't be gotten from the Cursor object. There's also a comment there that suggested fishing around in the JRE, which I've also tried a bit: There and in google images, I didn't find any straightforwardly accessible graphics files to plunder
An alternative would be to add a mouseMoved listener and draw manually a little to the right of the cursor (on the parent, I suppose, to avoid clipping at the borders?) but I was a bit concerned about overhead, and in initial explorations, this was looking very complicated. I'd take other suggestions about finding or making a nice help cursor as well. (The hand is the best built-in, but it doesn't say "help" as clearly as a question-mark.)
I'm not sure this is the best solution in your case, because a good built-in mouse cursor should be the best. Anyway you can use mouse listeners and draw on a glasspane according to the mouse position. Here's a glasspane drawing example.
In general, no. Most cursors are owned by the platform's host operating system, but a few live in $JAVA_HOME/lib/images/cursors/
, for example:
$ 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
Java uses the default system cursor except for the Drag-and-Drop cursor, where it is using it's own cursors.
So for every cursors but DnD, refer to Extract cursor image in Java . JNA has to be used and can be easily added to any Maven project.
For DnD cursors, the solution from trashgod is good.
They can be loaded this way:
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;
}