You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何全局延长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中修改:

  1. FXML中给Tooltip加id:
<Tooltip fx:id="customTooltip" text="提示内容" />
  1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:24:02