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

JavaFX中如何在Tooltip显示时实时更新其文本内容?

JavaFX Tooltip 动态更新解决方案

核心修改思路

移除VehiculeFX类中的冗余字段(如altitude),直接通过后台线程传入的完整车辆数据实时更新Tooltip文本,同时确保UI操作在JavaFX主线程执行。

1. 修改VehiculeFX类

保留Tooltip实例引用,新增updateTooltip方法直接基于传入的数据构建文本:

import javafx.application.Platform;
import javafx.scene.Node;
import javafx.scene.control.Tooltip;

public class VehiculeFX {
    private final Tooltip tooltip;

    // 构造方法传入初始提示文本
    public VehiculeFX(String initialTooltipText) {
        this.tooltip = new Tooltip(initialTooltipText);
    }

    // 将Tooltip绑定到目标UI节点(如无人机图标)
    public void attachToNode(Node targetNode) {
        targetNode.setTooltip(tooltip);
    }

    // 直接用完整车辆数据更新Tooltip
    public void updateTooltip(float[] vehiculeData) {
        // 根据实际数据索引拼接需要展示的参数
        StringBuilder tooltipContent = new StringBuilder("无人机状态\n");
        tooltipContent.append("高度:").append(vehiculeData[5] / 1000).append(" km\n");
        tooltipContent.append("速度:").append(vehiculeData[0]).append(" m/s\n");
        // 可添加更多参数,如电量、航向等
        tooltipContent.append("剩余电量:").append(vehiculeData[3]).append("%");

        // 确保UI操作在JavaFX主线程执行,避免线程异常
        Platform.runLater(() -> tooltip.setText(tooltipContent.toString()));
    }
}

2. 调整Monitor类的更新循环

替换原有的updateAltitude调用,直接传入完整的车辆数据:

@Override
public void run() {
    while (!Thread.currentThread().isInterrupted()) {
        try {
            // 控制更新频率,比如每100毫秒更新一次
            Thread.sleep(100);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            break;
        }

        for (int i = 0; i < enjambre.numDrones(); i++) {
            Vehicule v = vehicules.get(i);
            float[] vehiculeData = v.getVehiculeData();
            // 调用更新方法传入完整数据
            vehiculesFX.get(i).updateTooltip(vehiculeData);
        }
    }
}

为什么原有onShowing方案无效?

原有代码依赖onShowing事件更新文本,但存在两个问题:

  • 如果toolTipText是固定初始值,拼接的altitude可能是旧数据(因为字段更新和事件触发不同步)
  • JavaFX的Tooltip可能会缓存文本内容,即使事件触发也不会强制刷新

直接在数据更新时修改Tooltip文本,能确保下次显示时始终是最新状态,同时避免冗余字段。

内容的提问来源于stack exchange,提问作者sushiwithoutsushi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:31:16