如何控制 JavaFX 工具提示的延迟?

2022-09-01 06:20:34

我正在玩JavaFX的工具提示。我意识到,就我个人而言,将鼠标悬停在某物上和实际出现的工具提示之间的延迟太长了。在 API 中查看一下,可以看出:

通常,当鼠标在控件上移动时,工具提示会被“激活”。在工具提示“激活”和实际显示之间通常存在一些延迟。细节(如延迟量等)留给 Skin 实现。

经过进一步调查,我无法找到任何控制延迟的可能性。JavaFX CSS 参考没有关于延迟时间的信息,运行时评估也没有帮助。getCssMetaData()

我知道有一种方法可以通过 和 手动控制工具提示,但是真的没有其他方法吗?还是我错过了一个明显的解决方案?onMouseEntered(...)onMouseExited(...)


答案 1

我通过反射使用下一个技巧

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

答案 2

在Java 9及更高版本中,您可以

Tooltip tooltip = new Tooltip("A tooltip");
tooltip.setShowDelay(Duration.seconds(3));

还有一个属性,用于工具提示出现和再次隐藏之间的延迟。缺省值为 1 秒,缺省值为 200 毫秒。hideDelayshowDelayhideDelay


推荐