如何将工具提示添加到 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 使用动画最小化和最大化未装饰的舞台

    我在这个问题中使用已接受的答案 JavaFX 最小化未修饰的阶段 https stackoverflow com questions 26972683 javafx minimizing undecorated stage正确最小化我的应用
  • FXML load() 期间出现 JavaFX IllegalAccessException

    我有一个由以下代码调用的对话框窗口 DialogController是使用模式对话框窗口的辅助类 它主要将控制器引用与其窗口捆绑在一起 void handleServicesEdit ActionEvent event throws IOE
  • 向 Windows 任务栏缩略图添加按钮 JavaFX?

    这个问题已经闲置一年多了 我的问题仍然没有解决方案 我编辑此内容是为了澄清我的问题并引起人们对它的新关注 如果您使用 Windows 您可能知道将程序图标悬停在任务栏上时显示的小预览图像 缩略图 某些程序 例如 Spotify Git 扩展
  • JavaFX 中 ImageView 的顺序转换

    我已经看过了如何在 javafx 2 1 中等待转换结束 https stackoverflow com questions 11188018 how to wait for a transition to end in javafx 2
  • 在 CSS 中设置 TableView 样式 (JavaFX)

    如何在 TableView 中设置 THIS 点的样式 我的 CSS 代码如下所示 Empty Stylesheet file root fx background color 262626 table view fx background
  • 如何使 AnchorPane 大小响应最大化的屏幕视图

    我不知道什么是灰色地带以及如何扩展我的Anchorpane到整个屏幕Image https i stack imgur com m5HqA png 不是未最大化的视图是这样的image2 https i stack imgur com 14
  • 使用 qTip2 确认工具提示对话框?

    因此 当用户单击删除按钮时 我尝试创建一个小型确认对话框 内联 工具提示 我想象它看起来有点像这样 但带有小文本和 确定 和 取消 按钮 但我不是来问如何设计它的 我更喜欢使用 qTip2 作为该工作的插件 但如果你有更好的选择 我也会选择
  • javafx中的stackpane和root有什么区别?

    我正在练习javafx做饼图 以下是开发饼图的代码 如果我这样做Group并与StackPane 我发现输出没有区别 我已经评论了组部分 只是徘徊两者之间的区别 import javafx application Application i
  • 如何使用 javafx 创建响应式文本?

    我创建了一个标签 其中显示了一个数字 现在我想让这个数字响应 GUI 我怎样才能做到这一点 这是我的号码及其当前字体大小 Label label new Label label setText 12 label setFont Font f
  • 无法解析符号“javafx.scene.web”

    使用Intellij 2021 3 2 JavaFX版本 11 0 2 1 我正在尝试将 JavaFX WebView 添加到我的应用程序中 我的导入语句无法编译 import javafx scene web 编译错误 java 找不到符
  • setToolTipText 消耗鼠标事件的解决方法?

    这似乎是 SWING 已验证的问题 http forums sun com thread jspa threadID 385730 http forums sun com thread jspa threadID 385730 我目前正在尝
  • 在 JavaFX 中搜索 TableView 列表

    如何在 TableWie 中查找记录 例如通过 ID 并选择创建的行并将其放在 Java 8 JavaFX 中的屏幕中间 您可以使用以下方式搜索元素 int searchId table getItems stream filter ite
  • 更改 Bootstrap 工具提示显示/淡入和淡出的时间量

    我正在使用 Twitter Bootstrap 添加工具提示 是否可以添加一个属性来确定工具提示显示的时间 淡入和淡出所需的时间 span class myClass span Cheers Bootstrap 使用该类 fade用于工具提
  • 如何在场景生成器中设置控制器?

    我想用sceneBuilder for a javaFx应用 我有一个Package它被称作testPac其中有如图 1 所示的文件夹 我有一个fxml文件及其controller在 的里面view文件夹 现在 我不知道我必须在控制器盒内使
  • JavaFX使节点覆盖父节点边框颜色

    我有一个如下所示的节点 仅使用 css 我希望标签覆盖其父边框颜色 因此标签下方的边框颜色部分变得不可见 我用来制作这个边框的CSS代码 fx border color black fx border width 3 fx border r
  • Javafx 从 TextField 获取输入

    这是我当前的代码 它所做的只是为我制作的计算器设置一个 GUI 界面 我希望用户输入两个值 然后当按下 Sum 按钮时 它将两个值加在一起并将其显示在 Sum 文本字段中 我正在尝试使用 JavaFX 如果您能提供一些帮助 我将不胜感激 i
  • JavaFX:将像素写入 PixelWriter 的最快方法

    我正在寻找最快的方式来写入像素javafx scene image Image 写信给BufferedImage的后备数组要快得多 至少在我制作的测试图像上 只花了大约 20 毫秒BufferedImage WritableImage另一方
  • JavaFX ReadOnlyListProperty 不是只读的?

    这段代码抛出 UnsupportedOperationException 正如我所期望的那样 因为它是只读的 ListProperty
  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • 如何在日期选择器中设置不在当前月份的单元格的样式

    我目前正在为我的 JavaFX 应用程序制作注册表 问题是 当日期选择器中的单元格不在页面的月份上时 我想让该单元格变灰 让我们看看我当前的日期选择器 我的日期选择器 正如您所看到的 我希望下个月的日期 27 日 28 日 30 日以及 1

随机推荐

  • 是否有任何浏览器布局引擎可以本地解释 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范围内的一些