JavaFX:设置文本控件的背景颜色

2023-11-27

我正在使用 TextFlow 和一些文本项来显示样式文本,但我找不到一种方法来设置简单的背景颜色Text items.

我可以设置填充颜色和字体,但它没有设置其背景颜色的 java 方法或 css 属性。


基于此solution,这是一种为所有对象提供背景色的方法的快速实现Text内的节点FlowPane,使用 CSS 并能够设置一系列由 分隔的绘制值commas(尽可能Text项)以及其中每一项的插图:

private FlowPane flow;
private Scene scene;

@Override
public void start(Stage primaryStage) {
    Text text0 = new Text("These are several ");
    Text text1 = new Text("Text Nodes ");
    Text text2 = new Text("wrapped in ");
    Text text3 = new Text("a FlowPane");
    text0.setFill(Color.WHEAT);
    text0.setFont(new Font("Times New Roman", 20));
    text1.setFill(Color.WHITE);
    text1.setFont(new Font("Verdana", 32));
    text2.setFill(Color.WHITESMOKE);
    text2.setFont(new Font("Arial", 24));
    text3.setFill(Color.WHITESMOKE);
    text3.setFont(new Font("Arial", 18));

    flow = new FlowPane(text0, text1, text2, text3);
    scene = new Scene(flow, 300, 200);

    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();

    setBackgroundColors();
    flow.needsLayoutProperty().addListener((obs,d,d1)->setBackgroundColors());        
}

private void setBackgroundColors(){
    final Bounds out = flow.getBoundsInLocal();
    final StringBuilder sbColors = new StringBuilder();
    final StringBuilder sbInsets = new StringBuilder();
    AtomicInteger cont = new AtomicInteger();
    flow.getChildrenUnmodifiable().forEach(n->{
        sbColors.append("hsb(")
                .append((((double)cont.get())/((double)flow.getChildren().size()))*360d)
                .append(", 60%, 90%)");
        Bounds b = ((Text)n).getBoundsInParent();
        sbInsets.append(b.getMinY()).append(" ");
        sbInsets.append(Math.min(scene.getWidth(),out.getMaxX())-b.getMaxX()).append(" ");
        sbInsets.append(Math.min(scene.getHeight(),out.getMaxY())-b.getMaxY()).append(" ");
        sbInsets.append(b.getMinX());
        if(cont.getAndIncrement()<flow.getChildren().size()-1){
            sbColors.append(", ");
            sbInsets.append(", ");
        }
    });
    flow.setStyle("-fx-background-color: "+sbColors.toString()+"; -fx-background-insets: "+sbInsets.toString()+";");
}

这将导致:

Flow1

调整场景大小后:

Flow2

EDIT

基于使用的OP请求TextFlow布局而不是FlowPane, since Text节点可以跨越多条线TextFlow,给定的解决方案将不再有效,因为每个文本节点的边界框将与其他节点重叠。

作为解决方法,我们可以拆分Text单个单词中的节点Text节点,同时为相同原始短语中的节点保持相同的背景颜色。

我不会讨论分割逻辑,但我将添加一个索引列表,其中每个索引都将文本节点与其背景颜色索引进行映射。

private FlowPane flow;
private Scene scene;

private final List<Integer> indices=Arrays.asList(0,0,0,1,1,2,2,3,3);

@Override
public void start(Stage primaryStage) {
    List<Text> text0 = Arrays.asList(new Text("These "), new Text("are "), new Text("several "));
    List<Text> text1 = Arrays.asList(new Text("Text "), new Text("Nodes "));
    List<Text> text2 = Arrays.asList(new Text("wrapped "), new Text("in "));
    List<Text> text3 = Arrays.asList(new Text("a "), new Text("FlowPane"));
    text0.forEach(t->t.setFill(Color.WHEAT));
    text0.forEach(t->t.setFont(new Font("Times New Roman", 20)));
    text1.forEach(t->t.setFill(Color.WHITE));
    text1.forEach(t->t.setFont(new Font("Verdana", 32)));
    text2.forEach(t->t.setFill(Color.WHITESMOKE));
    text2.forEach(t->t.setFont(new Font("Arial", 24)));
    text3.forEach(t->t.setFill(Color.WHITESMOKE));
    text3.forEach(t->t.setFont(new Font("Arial", 18)));

    flow = new FlowPane();
    flow.getChildren().addAll(text0);
    flow.getChildren().addAll(text1);
    flow.getChildren().addAll(text2);
    flow.getChildren().addAll(text3);
    scene = new Scene(flow, 300, 200);

    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();

    setBackgroundColors();
    flow.needsLayoutProperty().addListener((obs,d,d1)->setBackgroundColors());        
}

private void setBackgroundColors(){
    final Bounds out = flow.getBoundsInLocal();
    final StringBuilder sbColors = new StringBuilder();
    final StringBuilder sbInsets = new StringBuilder();
    AtomicInteger cont = new AtomicInteger();
    flow.getChildrenUnmodifiable().forEach(n->{
        sbColors.append("hsb(")
                .append((double)indices.get(cont.get())/(double)(indices.get(flow.getChildren().size()-1)+1)*360d)
                .append(", 60%, 90%)");
        Bounds b = ((Text)n).getBoundsInParent();
        sbInsets.append(b.getMinY()).append(" ");
        sbInsets.append(Math.min(scene.getWidth(),out.getMaxX())-b.getMaxX()-1).append(" ");
        sbInsets.append(Math.min(scene.getHeight(),out.getMaxY())-b.getMaxY()).append(" ");
        sbInsets.append(b.getMinX());
        if(cont.getAndIncrement()<flow.getChildren().size()-1){
            sbColors.append(", ");
            sbInsets.append(", ");
        }
    });
    flow.setStyle("-fx-background-color: "+sbColors.toString()+"; -fx-background-insets: "+sbInsets.toString()+";");
}

This FlowPane现在表现为TextFlow:

Flow3

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

JavaFX:设置文本控件的背景颜色 的相关文章

  • 消息框按钮文本

    我环顾四周 似乎所有内容都可以在消息框中编辑 禁止按钮上的文本 WPF http en wikipedia org wiki Windows Presentation Foundation C MessageBox Show Generic
  • 有人可以用非常简单的图形方式给出余弦相似度的例子吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 维基百科上的余弦相似度文章 http en wikipedia org wiki Cosine similarity 你能在这里显示向量吗
  • 标签文字位置

    我有一个带有图像和文本的标签 final Label label new Label labelText label setTextAlignment TextAlignment CENTER ImageView livePerformIc
  • 将纯文本转换为 HTML

    我有一个脚本 在某个时刻我可以通过 Ajax 调用获取 HTML 数据 我必须将此 HTML 转换为纯文本 如下所示 div text data 我现在想扭转这一局面 再次将文本设为 HTML 我有一个简单的 Jquery 方法可以做到这一
  • Android:使 Dialog 周围的所有内容都比默认值更暗

    我有一个具有以下样式的自定义对话框 它显示了一个无边框对话框 后面的任何内容都会 稍微 变暗 我的设计师希望背后的一切都比 Android 的默认设置更暗 但不是完全黑色 有这样的设置吗 我能想到的唯一解决方法是使用全屏活动而不是对话框 只
  • Javafx 组合框不会在实时更改时更新下拉列表大小?

    我正在使用 Javafx v8 0 25 b18 我出现的问题是动态组合框的下拉列表的大小不会改变 所以如果我最初在下拉列表中有两个项目 那么下拉列表大小将适合两个项目 但如果我现在用以下内容填充动态组合框三个项目 然后我在里面得到一个小滚
  • 错误:缺少 JavaFX 运行时组件,并且需要使用 Gradle 示例来运行此应用程序

    我知道这个问题已被问过多次 但我似乎找不到解决方案 摘自官方指南示例 https openjfx io openjfx docs gradle https openjfx io openjfx docs gradle我继续添加了我的构建 g
  • 在午夜更新应用程序徽章,并提供以下选项:应用程序未启动或在后台,徽章数量可能会减少

    我正在阅读许多有关本地通知的内容以及它们如何帮助更新应用程序徽章编号 我想在午夜更新此徽章 并将其值设置为我在午夜之前无法知道的数字 因此 如果可能的话 我想在午夜启动一个功能来更新 加载一些数据 检查要显示的数字 并将其显示在徽章上 当然
  • 如何在日期选择器中设置不在当前月份的单元格的样式

    我目前正在为我的 JavaFX 应用程序制作注册表 问题是 当日期选择器中的单元格不在页面的月份上时 我想让该单元格变灰 让我们看看我当前的日期选择器 我的日期选择器 正如您所看到的 我希望下个月的日期 27 日 28 日 30 日以及 1
  • Ubuntu 上的 Vim:文本渲染错误,奇怪地重复和消失

    不久前我在 ubuntu 12 04 上安装了 vim 有时 当我在代码上运行光标 使用键盘 而不是鼠标 时 文本会消失 就好像渲染字符时出现问题一样 当我再次运行光标时 它通常会重新出现 这似乎是随机发生的 但通常足以让人恼火 为了更清楚
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • 为什么 JavaFX API 不包含在 Java 8 J2SE 中? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有谁知道为什么 JavaFX 8 仍然不是即将推出的 Java 8 中的日常 J2SE API 显示所有 Java 组件的技术图清楚地将 Jav
  • 如何使用文本相似性删除 pandas 数据框中相似(不重复)的行?

    我有数千个数据 这些数据可能相似也可能不相似 使用 python 的默认函数 drop duplicates 并没有真正的帮助 因为它们只检测相似的数据 例如 如果我的数据包含类似以下内容怎么办 嗨 早上好 嗨 早上好 Python 不会将
  • JavaFX ScrollPane 样式

    我正在尝试在 JavaFX 中创建一个黑白 ScrollPane 我已经创建了一个 CSS 文件 它工作得很好 除了这个小方块 无论我尝试什么 我都无法将其变黑 这是我的 CSS 文件 scroll pane fx background c
  • 如何在 Python 中使这个随机文本生成器更加高效?

    我正在研究一个随机文本生成器 不使用马尔可夫链 目前它的工作没有太多问题 首先 这是我的代码流程 输入一个句子作为输入 这称为触发字符串 被分配给一个变量 获取触发字符串中最长的单词 在所有古腾堡计划数据库中搜索包含该单词的句子 无论大写还
  • 删除窗口的背景图像 WPF

    我在 WPF 中遇到问题 其中窗口在关闭后 应用程序的另一部分尝试写入图像之前不会释放其对背景图像文件的文件锁定 举个例子 假设我有一个 WPF 应用程序 由 3 个窗口 1 个 菜单 选择窗口和另外 2 个窗口组成 两个窗口都会创建一个I
  • 测量以指定宽度包裹的文本高度

    如何计算渲染以指定宽度包裹的文本所需的高度 我在中找到了以下方法Graphics graphicsObj MeasureString text font width 但它需要一个实例Graphics当时我还没有图形实例 事实上 我更喜欢使用
  • 在JAVA中将数据写入.txt文件?

    我想知道是否是在JAVA中将计算的数据写入文本文件 我的 JAVA 代码是一个基于 GUI 的 gpa 计算器 我只想添加一个 JButton 和 ActionListener 它将类名 GPA 点和计算出的 GPA 写入 txt 文件 这
  • JavaFX 8 默认消息图标

    随着 JavaFX 的最近几次更新 我们收到了警报 我想获取消息的默认图标 错误 警告 在Swing中 我可以通过一些方式获取L F消息图标UIManager的属性 如何在 JavaFX 中获取消息的默认图标 它们是包含在属性中 还是由 C
  • 在电子邮件中嵌入背景图像

    我正在尝试使用电子邮件中的嵌入图像作为背景图像 我有以下代码来嵌入它 LinkedResource backgroundLink new LinkedResource background gif backgroundLink Conten

随机推荐

  • 用于在自连接表中的嵌套

    Please help me solve my big problem in my on line shopping project i created a dynamic Category List with Infinite Level
  • 搜索满足 Column1 <= X <= Column2 的行的 SQL 查询非常慢

    我正在使用 MySQL 数据库 并有下表 CREATE TABLE SomeTable PrimaryKeyCol BIGINT 20 NOT NULL A BIGINT 20 NOT NULL FirstX INT 11 NOT NULL
  • 所有事件驱动框架都应该是单线程的吗?

    http weblogs java net blog kgh archive 2004 10 multithreaded t html认为多线程 GUI 框架是一个失败的梦想 非 GUI 框架怎么样 这个经验法则是否适用于所有事件驱动框架
  • 应用程序启动器图标更改为 Oreo 上的默认图标

    我创建了一个带有自己的启动器图标的 Android 应用程序 它与牛轧糖配合得很好 但在 Oreo 中 我的图标被默认的 Android 图标取代 我已经定义了ic launcher png and ic launcher round pn
  • AutoMapper 与 ValueInjecter [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • 将音频 MMS:// 流式传输到 iPhone

    我想直播mms url我的 iPhone 应用程序 但到目前为止 很难获得有关该主题的信息 我知道有几个应用程序已经可以做到这一点 FStream WunderRadio Tuner 并且我已经阅读了一些关于它们可能使用 libmms 和
  • 模板类C++

    我尝试为我的大学项目设计一个模板 我写了以下代码 ifndef LinkedList H define LinkedList H include Link h include
  • C++ 中的扩展方法

    我正在寻找 C 中扩展方法的实现 并发现了这个 comp std c 讨论其中提到polymorphic map可以用于将方法与类相关联 但是 提供的链接似乎已失效 有谁知道这个答案指的是什么 或者是否有另一种方法以与扩展方法类似的方式扩展
  • 乔恩·斯基特 (Jon Skeet) 的 Singleton 澄清

    public sealed class Singleton Singleton public static Singleton Instance get return Nested instance class Nested Explici
  • 等效的隐式运算符:为什么它们是合法的?

    Update 请参阅下面我对 C 规范的一部分的剖析 我想我一定错过了一些东西 因为me看起来我在这个问题中描述的行为实际上违反了规范 更新2 好吧 经过进一步思考 并根据一些评论 我想我现在明白发生了什么 规范中的 源类型 一词指的是正在
  • 迭代器上的 Scala 映射不会产生副作用

    为什么会这样 scala gt List 1 2 3 4 iterator map x Int gt println x 不打印出来 1 2 3 4 while List 1 2 3 4 map x Int gt println x Lis
  • 如何将系统麦克风音频流传输到连接设备麦克风音频流

    I am trying to attach USB device used for tele calling which have pnp sound controller for mic and speaker Now i have tw
  • Spring Boot with Security OAuth2 - 如何通过 Web 登录表单使用资源服务器?

    I have 春季启动 1 2 1 RELEASE 服务的应用程序OAuth2 2 0 6 RELEASE 授权和资源服务器位于一个应用程序实例中 它使用自定义UserDetailsService实现利用MongoTemplate在 Mon
  • Pandas:列的指数平滑函数

    我有以下包含交易数据的 DataFrame df pd DataFrame Trader Carl Mark Carl Joe Mark Carl Max Max split Quantity 5 2 5 10 1 5 2 1 Date D
  • Javascript 和反斜杠替换

    这是我的字符串 var str This is my string 这是我的代码 var replaced str replace 我无法让我的输出为 This is my string 我已经尝试了我能想到的正则表达式和替换值的所有组合
  • 在meteor.js 中处理发布数据的简单方法?

    我需要在我的meteor js 应用程序中处理一些POST 数据 有没有一种简单的方法可以做到这一点 非常基本 如果它是一个 PHP 应用程序 我只需要 POST 变量 流星路由器 https github com tmeasday met
  • 如何确定 Apache 运行时的用户和组?

    在 DreamHost 共享主机上 我正在设置 htpasswd 但 Apache 无权读取该文件 我如何授予它权限 我想更改所有者或组 htpasswd文件而不是授予它不安全的权限 我认为我无权访问httpd conf文件 所以我不能使用
  • 将 ResourceProcessor 迁移到 HATEOAS 1.0.0 M1

    在我当前的 Spring HATEOAS 0 25 1 RELEASE 项目中 我大量使用资源处理器接口 Bean public ResourceProcessor
  • 使用 chunksize 迭代获取推断的数据帧类型

    如何使用 pd read csv 迭代地对文件进行分块并 保留数据类型和其他元信息 就像我阅读了整个内容一样 一次数据集 我需要读取太大而无法装入内存的数据集 我想使用 pd read csv 导入文件 然后立即将块附加到 HDFStore
  • JavaFX:设置文本控件的背景颜色

    我正在使用 TextFlow 和一些文本项来显示样式文本 但我找不到一种方法来设置简单的背景颜色Text items 我可以设置填充颜色和字体 但它没有设置其背景颜色的 java 方法或 css 属性 基于此solution 这是一种为所有