如何全局延长JavaFX中FXML定义的Tooltip自动隐藏前的显示时长
JavaFX FXML定义Tooltip延长显示时长解决方案
核心问题说明
FXML中通过Scene Builder可视化创建的Tooltip,默认没有在可视化面板暴露showDuration配置项,且直接在CSS中写纯数值配置该属性会抛出类型转换异常,Scene Builder中的auto-hide复选框控制的是点击外部区域是否隐藏,和超时自动隐藏逻辑无关,因此取消勾选也不会解决默认5000ms自动消失的问题。
可行解决方案
方案1:直接手动修改FXML代码(最便捷)
Scene Builder的可视化界面没有展示该配置,但FXML原生支持showDuration属性,直接在Tooltip标签中添加即可,支持时间单位和无限时长配置:
<!-- 设为10秒后自动隐藏 --> <Tooltip text="提示内容" showDuration="10000ms" /> <!-- 完全禁用自动隐藏,仅鼠标移出节点时隐藏 --> <Tooltip text="提示内容" showDuration="INDEFINITE" />
方案2:修正CSS写法即可生效
之前的CSS报错是因为没有加时间单位,导致解析为Double类型而非Duration类型,添加单位后即可正常运行:
.tooltip { /* 设为10秒,加ms或s单位即可 */ -fx-show-duration: 10000ms; /* 禁用自动隐藏写法 */ /* -fx-show-duration: indefinite; */ }
方案3:Controller中注入修改
如果不想改动FXML和CSS,也可以给Tooltip设置fx:id后在Controller中修改:
- FXML中给Tooltip加id:
<Tooltip fx:id="customTooltip" text="提示内容" />
- Controller中注入并配置:
import javafx.fxml.FXML; import javafx.scene.control.Tooltip; import javafx.util.Duration; public class MyController { @FXML private Tooltip customTooltip; @FXML public void initialize() { // 设为10秒 customTooltip.setShowDuration(Duration.millis(10000)); // 禁用自动隐藏写法 // customTooltip.setShowDuration(Duration.INDEFINITE); } }
内容的提问来源于stack exchange,提问作者Manius
相关产品推荐
相关产品推荐

