How to control the JavaFX Tooltip's delay?
I use the next hack for this via Reflection
public static void hackTooltipStartTiming(Tooltip tooltip) {
try {
Field fieldBehavior = tooltip.getClass().getDeclaredField("BEHAVIOR");
fieldBehavior.setAccessible(true);
Object objBehavior = fieldBehavior.get(tooltip);
Field fieldTimer = objBehavior.getClass().getDeclaredField("activationTimer");
fieldTimer.setAccessible(true);
Timeline objTimer = (Timeline) fieldTimer.get(objBehavior);
objTimer.getKeyFrames().clear();
objTimer.getKeyFrames().add(new KeyFrame(new Duration(250)));
} catch (Exception e) {
e.printStackTrace();
}
}
In Java 9 and later, you can do
Tooltip tooltip = new Tooltip("A tooltip");
tooltip.setShowDelay(Duration.seconds(3));
There is also a hideDelay
property, for the delay between the tooltip appearing and it being hidden again. The default values are 1 second for the showDelay
and 200 milliseconds for the hideDelay
.
There is an existing feature request for this: JDK-8090477 Customizable visibility timing for Tooltip.
The feature request is currently scheduled for integration into Java 9. Attached to the issue I linked is a patch you can apply to allow you to get this functionality in earlier Java versions.
Your other option is just to create your own popup control using one of the techniques in:
- JavaFX 2 custom popup pane