如何将工具提示添加到 JavaFX Canvas 的矩形区域

2023-12-14

在我的 JavaFX 应用程序中,我有一个TableView具有多个列,其中一列以图形形式显示数据。为此,我创建了一个CanvasCell创建并管理自己的对象Canvas来处理绘图。绘图部分工作得很好。

我现在想把Tooltips范围内的一些地区Canvas/Cell。可能有多个Tooltips per Cell(这阻止我添加Tooltip at the Celllevel)并且它们应该只在图表的特定区域触发。但是,我根本无法让它发挥作用。我似乎不太了解显示节点层次结构的交互(读“完全”),无法放置Tooltip任何它真正起作用的地方。

JavaFX 的文档很少,而且对于我尝试过的所有搜索,Google + SO 都显示为空白。有没有人知道如何做这类事情,或者我应该暂时将其视为“不是一个选择”。

有关信息,CanvasCell打电话给draw()扩展内的函数Canvas对象上updateItem()。我尝试创建的代码Tooltip坐在里面draw()功能和看起来像:

    Rectangle rect = new Rectangle(leftVal, topVal, width, height);
    gc.fillRect(rect.getX(), rect.getY(), rect.getWidth(), rect.getHeight());
    Tooltip tooltip = new Tooltip("Tooltip Text");
    Tooltip.install(rect, tooltip);

但该代码更多地是出于希望而编写的,并且不会在界面中生成任何有用的内容。

如果有人能指出我正确的方向,我将非常感激。


如果不需要如图所示的时序控制here,您只需安装Tooltip在封闭的Canvas和杠杆Shape::contains如下所示调整文本。

node.setOnMouseMoved(e -> {
    tooltips.forEach((color, bounds) -> {
        if (bounds.contains(e.getX(), e.getY())) {
            tooltip.setText(color.toString());
        }
    });
});

按照建议here,Java 9 及更高版本提供了对Tooltip通过属性计时showDelay and showDuration.

说明了类似的方法here对于摇摆。

image

import javafx.application.Application;
import javafx.scene.shape.Rectangle;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.StackPane;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.stage.Stage;

import java.util.HashMap;
import java.util.Map;

/**
 * @see https://stackoverflow.com/a/53785468/230513
 * @see https://stackoverflow.com/a/53753537/230513
 */
public class CanvasTooltipDemo extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        StackPane root = new StackPane();
        Scene sc = new Scene(root, 400, 400);
        stage.setScene(sc);
        Canvas canvas = new Canvas(200, 200);
        root.getChildren().add(canvas);

        Map<Color, Rectangle> tooltips = new HashMap<>();
        tooltips.put(Color.RED, new Rectangle(0, 0, 100, 100));
        tooltips.put(Color.BLUE, new Rectangle(100, 0, 100, 100));
        tooltips.put(Color.YELLOW, new Rectangle(0, 100, 100, 100));
        tooltips.put(Color.GREEN, new Rectangle(100, 100, 100, 100));
        GraphicsContext gc = canvas.getGraphicsContext2D();
        tooltips.forEach((color, bounds) -> {
            gc.setFill(color);
            gc.fillRect(bounds.getX(), bounds.getY(), bounds.getWidth(), bounds.getHeight());
        });

        setToolTips(canvas, tooltips);
        stage.show();
    }

    private void setToolTips(Node node, Map<Color, Rectangle> tooltips) {
        Tooltip tooltip = new Tooltip();
        Tooltip.install(node, tooltip);
        node.setOnMouseMoved(e -> {
            tooltips.forEach((color, bounds) -> {
                if (bounds.contains(e.getX(), e.getY())) {
                    tooltip.setText(color.toString());
                }
            });
        });
        node.setOnMouseExited(e -> {
            tooltip.hide();
        });
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将工具提示添加到 JavaFX Canvas 的矩形区域 的相关文章

  • 在JavaFX中如何在表视图中添加带有数据的组合框

    我已经尝试了很多 但无法将数据库中的所有值填充到我的组合框表格单元格中 控制器 java public class controller GetConnection gc new GetConnection PreparedStatemen
  • 错误:无法初始化主类 FileChooser_1 原因:java.lang.NoClassDefFoundError:阶段 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在这里编写了以下代码 我无法运行该程序 并且不断出现下面提到的错误 我尝试了很多可能的解决方案 但都是徒劳 import java
  • JavaFX 2 XYChart.Series 和 setOnMouseEntered

    是否可以设置 XYChart Series 的实例来作用于 setOnMouseEntered 在我看来 使其工作的一个前提条件是实现 EventTarget 接口 至于JavaFX XYChart Series 当光标触摸黄线时 我想突出
  • 多个链接 dc.js 图表的 d3-tooltips

    我正在寻找修改 dc js 的开箱即用工具提示 似乎有一个解决方案使用d3 js 工具提示 https github com Caged d3 tip as in 这个问题 https stackoverflow com questions
  • 更改JavaFX TableView字体大小[重复]

    这个问题在这里已经有答案了 您好 我想在表视图列内的文本上设置字体 我如何用 Java 做到这一点 这是我的代码 感谢帮助 private final TableView
  • Mac 上的 JavaFX WebView 字体问题

    有些网站显示乱码而不是正确的文本 它只发生在 Mac 上 For example with GMapsFX 可能与 OS X 10 11 或 10 12 有关 我用Java 1 8 0 121测试了它 此问题有任何修复或解决方法吗 就我而言
  • JavaFX 应用程序隐藏 OSX 停靠图标

    我需要隐藏 javafx 应用程序的停靠图标 在普通的 java 应用程序中 这可以通过以下属性来实现 System setProperty apple awt UIElement true 然而 这似乎不适用于 JavaFX Thanks
  • Javafx 可拆卸窗格系统

    这是我在几个不同的软件中看到的我喜欢的东西 我不知道它来自哪里 也不知道它的真正名称是什么 但这里是 Visual Studio 中的窗格系统的示例 请注意我如何轻松地将窗格固定在任何地方 Javafx 可以实现这样的事情吗 我知道这个问题
  • 如何修改CToolTipCtrl的工具矩形?

    这个问题是与此相关的 https stackoverflow com questions 269837 how do i display custom tooltips in a ctreectrl 在 CDockablePane 派生类中
  • 如何在 Java FX 中以编程方式模拟箭头键按下

    我想让我的 JFX 应用程序模拟箭头键按下 当它们在 TextField 中注册时 但我不知道如何发送字符串或字节以外的任何内容 我正在想象这样的事情 static EventHandler
  • JavaFX 多线程 - 连接线程不会更新 UI

    我正在尝试创建一个加载程序对话框 用户可以在其中知道程序正在加载所请求的内容并且程序正在按预期运行 但正因为如此 我需要join 解析器线程和之前继续主线程 这使得对话框空白 解析器任务 java public class ParserTa
  • 如何将图像添加到 jquery 工具提示

    我还没有看到这个确切的问题得到解决 如果有 请指出它 我正在使用 jquery 的 ui 工具提示 我有一个链接 当您将鼠标悬停在它上面时 我想显示一张图像 到目前为止 没有什么对我有用 标题中的 ui 代码 HTML see a a
  • JavaFX 按钮不会禁用

    我有一个可能需要几秒钟到几分钟的任务 当我单击按钮执行该任务时 它会运行该任务但并不总是禁用按钮A和启用按钮B 这是我正在使用的代码 FXML public void onExecute ActionEvent event btnExecu
  • 在模块路径上使用 OpenJFX 11 JMODS 在 JDK 11 上运行 javafx 示例

    我已经从 OpenJFX 项目下载了 JavaFX Jmod 文件并将它们放在目录中G openjfx javafx jmods 11 我使用的是 OpenJDK 11 其中没有 JavaFX jmodJAVA HOME jmods即它不附
  • 在 Chart.js 的工具提示中显示自定义数据集属性

    在饼图工具提示中显示自定义属性的最简单方法是什么 var pieData value 40 color F7464A highlight FF5A5E label Label 1 description This is a descript
  • 支持换行的 JQuery 工具提示

    我正在寻找一个轻量级的 jquery 插件 用于在用户将鼠标悬停在元素上时显示工具提示 我希望插件从标题属性中获取内容 而且我可以创建新行也很重要 任何帮助表示赞赏 在 jQuery 1 9 jquery jquery ui 和标准 too
  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • 使用 PropertyEditor (ControlsFX) 的属性表示例

    我一直在寻找使用 ControlsFX 属性表的任何好例子 但除了这个之外找不到任何东西 在此示例中 包含 NameItem 对象的 ObservableList 项被添加到其构造函数中的 PropertySheet 对象中 就像文档所述一
  • 使用 JavaFX 和 Maven 将模块描述符添加到库中[重复]

    这个问题在这里已经有答案了 我需要使用反思 https github com ronmamo reflections在一个带有 JavaFX 的 Maven 项目中 我想使用jlink捆绑一个最小的 JRE 问题是我运行时出现以下错误mvn
  • JAVAFX制作动态文本区域大小

    我正在使用 JAVAFX 制作聊天应用程序 消息显示在textArea中 但textArea始终具有相同的大小 如何使 textArea 完全适合文本量 氨氮 下面的代码正是你想要的 public class Main extends Ap

随机推荐

  • 是否有任何浏览器布局引擎可以本地解释 SASS(没有 CSS)或启用此功能的插件?

    想象一个仅由 HTML SASS 文件组成的网站 但在浏览器中显示就像 HTML CSS 一样 本质上 首先跳过将 SASS 编译为 CSS 的步骤 有没有任何 甚至是边缘 项目可以实现这一点 不 但是我们正在努力将想法从 Sass Les
  • 语法错误:预期表达式,得到“<”

    I got SyntaxError expected expression got lt 当我执行以下节点代码时控制台出现错误 var express require express var app express app all func
  • 如何使用 jquery 对 api 进行 jsonp 调用

    一般来说 我对编程很陌生 当我调用 moviedb org api 时 我无法将数据导入到我的 Web 应用程序中 我正在使用jquery 我已经阅读了所有文档 甚至是食谱 我仍然在努力完成这项工作 我还检查了我的谷歌开发工具控制台 它显示
  • 在 swift Playground 中使用 NSTimer [重复]

    这个问题在这里已经有答案了 我想知道如何使用NSTimer在 Swift Playground 内 这个问题之前已经被问过 但没有一个答案真正回答了问题 这是我的游乐场代码 import Foundation class MyClass f
  • Apache 时间戳不正确

    我正在使用运行 PHP 的 WAMP 服务器 在特定步骤中 我尝试捕获系统时间并使用以下查询将其添加到数据库中 strSQLInsert UPDATE track SET State Repeat DateTime date m d Y h
  • 在 IntelliJ IDEA 和 Gradle 上调试时等待用户输入

    我有最简单的 Java 应用程序 如果从命令行执行 它就可以工作 但如果我想通过 IntelliJ IDEA 14 Ultimate 进行调试 System in read 部分总是返回 1 无需在其中输入任何内容 import java
  • 给定值 x 和 y,如果为 true,则返回规则名称

    这是我的序言文件 male bob male john female betty female dana father bob john father bob dana mother betty john mother betty dana
  • ColdFusion 相当于 PHP hash_hmac

    key 12345678876543211234567887654321 iv 1234567887654321 plaindata This is a test string enc base64 encode mcrypt encryp
  • 如何使用 System.Drawing 绘制表格

    我想使用 System Drawings 绘制一个表格 然后用一些文本填充单元格 该文本每隔几秒钟就会在不同的时刻发生变化 这是一个游戏 其中有一个网格 每隔几秒钟 随机单元格就会显示一个数字 然后用户必须在其下面的文本框中输入答案 此外
  • R中字符类的计数函数

    我的代码正常工作 然后 RStudio 崩溃了 当我重新打开它时 我的一行代码现在不起作用 CodeTable lt count unique Data Code 以前 这创建了一个包含 3 列的简单数据库 1 数字顺序 2 唯一代码 3
  • 从android中点击通知获取数据

    嘿伙计们 我需要帮助如何从使用广播接收器设置的待处理意图中获取数据 我想要发生的是在单击通知时获取我的活动所需的 id 数据 这就是我制作额外内容的方式 public class AlertReceiver extends Broadcas
  • 如何在 Haskell 中计算直方图?

    I found Statistics Sample Histogram 但我似乎无法使用它 如果我希望能够将列表分为四个类别 我希望能够执行以下操作 import Statistics Sample Histogram histogram
  • Opencv:您的设备似乎不支持相机(或者已锁定)

    我在 Android 4 0 4 的三星平板电脑上使用 opencv 2 4 5 的 Face Detection 和 Android 4 2 2 该应用程序可以使用前置摄像头来校准我的脸部 但是 当我使用此应用程序同时播放视频和面部检测时
  • 应用程序启动时导航抽屉始终处于膨胀状态

    我正在尝试将导航抽屉添加到我的主要活动中 在 Activity main xml 的设计视图中 它应该作为阴影动画在活动布局的左侧可见 我不知道我应该在这里使用什么术语 向右拖动 滑动时应该可见 但就我而言 它默认覆盖整个活动 并且不显示活
  • 获取 Dynamics 365 的身份验证令牌时出现错误 AADSTS90002

    我在尝试从 Net 客户端使用 Dynamics 365 进行身份验证时遇到以下错误 AADSTS90002 Tenant authorize not found This may happen if there are no active
  • 无法在带有 Xcode 4.3.1 和 IOS 的 iPhone 4.2.1 上运行应用程序

    我希望有人可以提供帮助 这个问题已经困扰我一段时间了 我正在运行 Xcode 4 3 1 和基本 SDK iOS 5 1 iPhone版本是4 2 1 我相信是旧的3S型号 当点击 运行 时 Xcode 编译正常 并表示它正在手机上运行我的
  • 将 unicode 转换为 char

    如何将 Unicode 字符串转换为char or char const in 内河码头 c String text Hello world char txt AnsiString text c str Older text t str i
  • 如何在 C# 中监控剪贴板内容变化? [复制]

    这个问题在这里已经有答案了 I want to have this feature in my C program When the user do Ctrl C or Copy anywhere i e when the clipboar
  • 在matlab中找到峰值

    假设我们确定向量中的峰值如下 我们有长度为 m 的实数值一维向量 或者 x 1 x 2 x 米 如果 x 1 gt x 2 则显然对于第一个点 Peak 1 x 1 否则我们将 x 3 与 x 2 进行比较 如果 x 3 indexes p
  • 如何将工具提示添加到 JavaFX Canvas 的矩形区域

    在我的 JavaFX 应用程序中 我有一个TableView具有多个列 其中一列以图形形式显示数据 为此 我创建了一个CanvasCell创建并管理自己的对象Canvas来处理绘图 绘图部分工作得很好 我现在想把Tooltips范围内的一些