首页 > 编程语言 >JavaFx 关键字高亮文本实现

JavaFx 关键字高亮文本实现

时间:2023-05-11 23:55:12浏览次数:66  
标签:高亮 val itemTitleLowcase JavaFx label substring 关键字 itemTitle

原文地址: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))
        }
    }

}

标签:高亮,val,itemTitleLowcase,JavaFx,label,substring,关键字,itemTitle
From: https://www.cnblogs.com/stars-one/p/17392608.html

相关文章

  • Java关键字总结
    finalfinal在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。final变量对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象,但是可以改变实例的属性。凡......
  • 高亮显示字符。兼容大小写,特殊字符
    一个兼容大小写,特殊字符的高亮显示函数functionhighlight(str,char){constescapedChar=char.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');if(str.toLowerCase().includes(char.toLowerCase())){returnstr.replace(newRegExp(escapedChar,'gi'......
  • Java 9模块化关键字及应用场景
    一、背景SpringBoot3.0最低要求jdk17,为跟上节奏储备知识。二、简介关键字描述应用场景module定义一个模块代码隔离,依赖控制,代码可重用性openmodule定义一个像java9之前的开放模块像Java的旧版本那样允许完全反射exports...to指定模块的一部分对外提供......
  • C++ 类和对象: const关键字
    1.const关键字在C语言中,const关键字用来修饰变量,表示变量的值不能被修改在C++中,const可以修饰变量,也可以用来修饰对象和类成员变量下面先来看一下,const修饰对象使用const修饰的对象d1,调用成员函数报错,这是为什么?那么只要把this指针类型改为constDate*,......
  • C# ref关键字和out关键字
    1.ref关键字     我们知道C#语言的数据类型分为值类型和引用类型,其中它们最典型的差别就是在作为方法的参数方面。值类型数据作为参数,修改形参时不会影响到实参;而引用类型数据作为参数,修改形参可以影响到实参。  但是某些情况下,传递的是值类型数据,却要求把修改的结......
  • 一道Promise面试题,并对比向其代码中添加await关键字后的变化
    标准代码:(function(){console.log(1);window.setTimeout(()=>{console.log(2);},100);newPromise((resolve)=>{console.log(3);resolve();}).then(()=>{console.log(4);......
  • php获取1688阿里巴巴关键字搜索新品数据API接口、获取上新关键词推荐、获取宝贝详情数
    ​ php的主要优势以及特点: 便于学习和使用:PHP是一门非常容易学习和使用的语言,其语法和结构都非常简单。具有广泛的应用范围:PHP可以用于开发各种类型的Web应用,如博客系统、内容管理系统、电子商务网站、社交网络等。巨大的社区支持:有一个庞大的PHP社区,提供了大量的......
  • Android TextView 设置超链接、关键字高亮等效果
    之前做TextView关键字高亮效果,使用的是Html.fromHtml(Stringsource)方法,然后通过TextView的setText(CharSequencetext)方法来显示后来测试此方法在部分手机上显示有问题,如Nexus4,华为P6等等。于是乎只能继续寻找别的解决办法了,在这里Mark一下。这里用到了SpannableString类......
  • vue 导致el-menu高亮会失效的问题
    一个router转到另一个router常用的方法:this.$router.push({path:'',params:{}});this.$router.push({path:'',query:{}});这种方式传参都是可以接收到的。但是有个问题,导致中的el-menu不能高亮显示,进行跟踪以后会现:default-active与router的index都是一致。但就是不能高亮,除......
  • oracle 行转列 使用PIVOT关键字
    select*from(SELECTSTOP_ID,POSITION,INSTANT,SET_VALUEfromtable1)pivot( min(INSTANT)I,min(SET_VALUE)VFORPOSITIONIN( 1ASHT1, 2ASHT2, 3ASHT3, 4ASHT4, 5ASHT5, 6AS HT1, 7AS HT2 ......