全局导致JavaFX工具提示在自动隐藏之前显示更长时间



当工具提示在Scene Builder创建的FXML中时,有什么方法可以增加工具提示停留的时间吗?

有一种东西叫做";显示持续时间";从Java 9开始,如果您在代码中创建工具提示,但似乎没有办法针对FXML工具提示进行调整。

完全禁用自动隐藏也很有帮助(因此它只在鼠标离开节点时隐藏(,但即使在场景生成器中取消选中自动隐藏复选框,这些东西仍然会在5000毫秒后自动隐藏。

有趣/奇怪的是,我确实发现如果你在css中这样做:

.tooltip {
-fx-show-duration: 10000;
}

它似乎在尝试,但你得到了一个异常(很遗憾他们没有在毫秒内使这个参数翻倍,也许这会起作用…(

Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: class java.lang.Double cannot be cast to class javafx.util.Duration (java.lang.Double is in module java.base of loader 'bootstrap'; javafx.util.Duration is in unnamed module of loader 'app')
at javafx.scene.control.Tooltip.getShowDuration(Tooltip.java:363)
at javafx.scene.control.Tooltip$TooltipBehavior.lambda$new$0(Tooltip.java:923)
at javafx.animation.Animation.finished(Animation.java:1131)
at javafx.animation.AnimationAccessorImpl.finished(AnimationAccessorImpl.java:49)
at com.sun.scenario.animation.shared.SingleLoopClipEnvelope.timePulse(SingleLoopClipEnvelope.java:103)
at javafx.animation.Animation.doTimePulse(Animation.java:1101)
at javafx.animation.Animation$1.lambda$timePulse$0(Animation.java:186)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.animation.Animation$1.timePulse(Animation.java:185)
at com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:344)
at com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:267)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:515)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:499)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:492)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:320)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
at java.base/java.lang.Thread.run(Thread.java:834)

PopupWindow#autoHide属性不控制Tooltip在一定时间后是否隐藏。该属性的作用是控制弹出窗口在失去焦点时是否会关闭。

我不认为你可以禁用工具提示的隐藏显示后持续时间功能。至少,除非你自己处理好展示和隐藏它们。安装工具提示后,将向目标节点添加多个鼠标事件处理程序。正是这些处理程序通过用作计时器的动画实现了工具提示的显示和隐藏。据我所知,你无法阻止隐藏后显示持续时间计时器启动。

至于通过CSS设置节目持续时间,你的做法是正确的。Tooltip#showDuration属性是可样式化的。这意味着,如果将样式表添加到场景中,则通过将鼠标悬停在该场景中的节点上显示的每个工具提示都将具有新的持续时间。唯一的问题是您在样式表中指定了一个数字,而不是持续时间。根据JavaFX CSS参考指南,持续时间的语法为:

<duration>

持续时间是以秒或毫秒为单位的<number>,或值indefinite

[<number>[ s | ms ]] | indefinite
  • s:持续时间(秒(
  • ms:持续时间(以毫秒为单位(。1秒是1000毫秒
  • indefinite:见Duration.INDEFINITE

例如:

.tooltip {
-fx-show-duration: 10000ms; /* or 10s */
}

老实说,我有点惊讶,它没有被定义为默认为一个单位,如果没有。我还感到惊讶的是,CSS解析器没有发现解析的类型不是正确的类型,而是在从泛型属性获取值时隐式地尝试强制转换为Duration,从而让其他代码出错。

最新更新