原文地址:JavaFx 关键字高亮文本实现 - Stars-One的杂货小窝

整蓝奏云批量下载器里的搜索功能想到的一个关键字高亮功能,借助textflow组件来实现,记录一下

本文基于TornadoFx框架进行编写,封装工具代码是kotlin版本

然后也是顺便把这个封装成了stars-one/common-controls

里的xHighLightTextFlow

效果

思路

实现思路不是太难,就是要看关键字的位置,然后计算下标

关键字位置有三种情况:

  1. 开头
  2. 中间
  3. 结尾

我们需要找到关键字的下标,然后依次创建出对应的label,如果是有关键字的label,则设置一下样式(背景色为黄色)

之后再将得到的多个label添加到textflow中即可

这里注意下,需要考虑下大小写的情况,我的做法就是计算坐标的时候,将文本和关键字全部转为小写来计算,这样就不会出现问题

代码

val myTextFlow = textflow {  }
val keyword = "我的"
val itemTitle = "我的东西22ss11" //这里转为小写处理,方便后面得到index
val itemTitleLowcase = itemTitle.toLowerCase()
val keywordLowcase = keyword.toLowerCase() val keyWordLength = keyword.length when {
itemTitleLowcase.startsWith(keywordLowcase) -> { //关键字位于开头
myTextFlow.apply {
label(itemTitle.substring(0, keyWordLength)) {
style {
backgroundColor += c("#ffff00")
}
}
label(itemTitle.substring(keyWordLength))
}
}
itemTitleLowcase.endsWith(keywordLowcase) -> {
val startIndex = itemTitleLowcase.indexOf(keywordLowcase)
//关键字位于结尾
myTextFlow.apply {
label(itemTitle.substring(0, startIndex))
label(itemTitle.substring(startIndex, itemTitleLowcase.length)) {
style {
backgroundColor += c("#ffff00")
}
}
}
}
else -> {
//关键字位于中间
val arr = itemTitleLowcase.split(keywordLowcase)
val range1 = arr.first().indices
val range2 = arr.first().length+keyWordLength until itemTitle.length myTextFlow.apply {
label(itemTitle.substring(range1))
label(keyword) {
style {
backgroundColor += c("#ffff00")
}
}
label(itemTitle.substring(range2))
}
} }

JavaFx 关键字高亮文本实现的更多相关文章

  1. C#,WPF中使用多文本显示数据,并对其数据进行关键字高亮等操作

    需求:针对多文本信息显示,我们需要对其内容中的某些关键字或者某行进行高亮显示,并用不同颜色显示. 分析:在C#中,首先要进行多文本信息显示,可以RichTextBox(不要使用TextBox)控件,该 ...

  2. [JavaScript]使页面内目标关键字高亮

    1 源码 function keywordHighlighten(querySelector, key, bgColor){//文本关键字高亮 var doms = document.querySel ...

  3. IOS_SearchBar搜索栏及关键字高亮

    搜索框的效果演示: 这个就是所谓的搜索框了,那么接下来我们看看如何使用代码来实现这个功能. 我所使用的数据是英雄联盟的英雄名单,是一个JSON数据的txt文件, JSON数据的处理代码如下所示: ? ...

  4. 在 Angular 中实现搜索关键字高亮

    在 Angular 中,我们不应该试图直接修改 DOM 的内容,当需要更新 DOM 内容的时候,应该修改的其实是我们的数据模型,也就是 $scope 中的数据,Angular 会帮助我们将修改之后的数 ...

  5. C#在PDF中如何以不同颜色高亮文本

    高亮的文本有助于阅读者快速有效地获取文章关键信息.在PDF文件中,对文章的不同文本,关键词.句等进行不同颜色的文本高亮操作,可以使阅读者在阅读过程中有效地区分不同高亮颜色文本的意义.在下面的示例中,我 ...

  6. 如何实现IOS_SearchBar搜索栏及关键字高亮

    搜索框的效果演示: 这个就是所谓的搜索框了,那么接下来我们看看如何使用代码来实现这个功能. 我所使用的数据是英雄联盟的英雄名单,是一个JSON数据的txt文件, JSON数据的处理代码如下所示: // ...

  7. Java实现文本中的关键字高亮,匹配所有长度

    这个方法还不完整,后面想起来再看,直接放代码 public static String getHeightlightWord(String textWord, String key){ StringB ...

  8. 【php+js】用PHP或者JS怎么显示搜索到的关键字高亮,及其文章里包含关键字的一小段

    1.想要实现的效果: 2.思路:小数据量使用 php的正则替换,即[preg_replace()]函数 -->> 支持多个关键词高亮显示,中间参数1和参数2放入对应的数组即可. $titl ...

  9. JavaScript搜索关键字高亮的实现

    高亮功能主要是指对页面中指定区域的指定文字进行高亮显示,也就是背景着色.一般在搜索结果页面会经常用到这个功能. 下面就为大家提供一种解决方案,用javascript实现. 首先在<head> ...

  10. 简单JavaScript语句实现搜索关键字高亮功能

    高亮功能主要是指对页面中指定区域的指定文字进行高亮显示,也就是背景着色.一般在搜索结果页面会经常用到这个功能. 下面就为大家提供一种解决方案,用javascript实现. 首先在<head> ...

随机推荐

  1. lc.977 有序数组的平方

    题目描述 给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序 排序. 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] ...

  2. MQ:Communications link failure

    ActiveMQ:Communications link failure问题以及解决办法   ActiveMQ版本:5.5.1 MQ 所使用的 MySQL 是 InnoDB存储引擎 记录人:@郑昀 现 ...

  3. vue3.0知识整理与总结

    在性能方面,对比Vue2.x,性能提升了1.3~2倍左右:打包后的体积也更小了. 非兼容的功能 一些和Vue2.x版本改动较大的语法,在Vue3存在兼容问题 v-modal   组件通信  v-for ...

  4. 背景图片 css写法

    background: url('../../assets/sj-my.png') no-repeat; background-size: 100% 100%;

  5. centos7开放8080端口

    1. firewall-cmd --state  :令防火墙处于开启状态 systemctl start firewalld.service: 2. firewall-cmd --zone=publi ...

  6. 7. 基础增删改 - 使用Portal Webapi进行会员信息的增删改

    我们可以通过使用Portal Web API在Portal页面中跨所有Microsoft Dataverse表执行创建.更新和删除操作,下面我们就一起来看一下如何通过使用AJAX函数来进行操作. AJ ...

  7. 网络安全(中职组)-B模块:暴力破解

    任务环境说明: 服务器场景名称:sql008 服务器场景用户名:administrator:密码:未知(封闭靶机) 1.使用渗透机场景kali中工具扫描服务器场景,将iis的版本号作为flag提交: ...

  8. 机器学习基础07DAY

    分类算法之决策树 决策树是一种基本的分类方法,当然也可以用于回归.我们一般只讨论用于分类的决策树.决策树模型呈树形结构.在分类问题中,表示基于特征对实例进行分类的过程,它可以认为是if-then规则的 ...

  9. YUM下载全量依赖

    在离线的内网环境下进行安装一些软件的时候会出现依赖不完整的情况,一般情况下会使用如下方式进行下载依赖包 查看依赖包可以使用 yum deplist 进行查找 [root@localhost ~]# y ...

  10. [Linux]scp/sshpass:物理主机与虚拟机的文件传输

    最初写这篇文章的时候,对 openssh大家族的工具套件(例如: ssh.sshd.ssl.scp等)不太熟悉,现在看来这个文章的标题(虚拟机与物理机)是存在问题的. 本质上,本文关心的并不是[虚拟机 ...