I have a Java Swing application, developed on Mac OS X 10.5 using Java 1.5.
I’m trying to make a custom cursor appear when the user moves the mouse over some text in a dialog. The cursor never changes, though.
When I don’t use a JFrame instead of a JDialog, the cursor does change. But then I’ll have to write all the dialog code myself.
How can I get the cursor to appear?
Here’s the simplest code I could create to demonstrate the problem:
import javax.swing.*; import java.awt.*; public class CursorTest { public static void main(String[] args) { JLabel label = new JLabel('Move mouse here for hand cursor'); label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); JOptionPane pane = new JOptionPane(label); pane.setOptions(new Object[]{'OK'}); JDialog dialog = pane.createDialog(null, 'Test Dialog'); dialog.setVisible(true); } }
Looks like it is a bug in Java 1.5: I first tried with Java 1.6.0_07 and it worked as expected (on Windows XP). Then I recompiled with Java 1.5.0_06 and indeed the cursor remains in default state.
Knowing the difficulties of Java 1.6 on MacOS, I see it will be hard to fix that…
Bug ID: 5079694 JDialog doesn’t respect setCursor
They give a workaround…
[EDIT] Tested workaround:
Works fine with my JDK & system.