原文地址:JavaFx 關(guān)鍵字高亮文本實現(xiàn) - Stars-One的雜貨小窩
整藍奏云批量下載器里的搜索功能想到的一個關(guān)鍵字高亮功能,借助textflow組件來實現(xiàn),記錄一下
本文基于TornadoFx框架進行編寫,封裝工具代碼是kotlin版本
然后也是順便把這個封裝成了stars-one/common-controls
里的xHighLightTextFlow
效果
思路
實現(xiàn)思路不是太難,就是要看關(guān)鍵字的位置,然后計算下標
關(guān)鍵字位置有三種情況:
- 開頭
- 中間
- 結(jié)尾
我們需要找到關(guān)鍵字的下標,然后依次創(chuàng)建出對應(yīng)的label,如果是有關(guān)鍵字的label,則設(shè)置一下樣式(背景色為黃色)
之后再將得到的多個label添加到textflow中即可文章來源:http://www.zghlxwxcb.cn/news/detail-439500.html
這里注意下,需要考慮下大小寫的情況,我的做法就是計算坐標的時候,將文本和關(guān)鍵字全部轉(zhuǎn)為小寫來計算,這樣就不會出現(xiàn)問題文章來源地址http://www.zghlxwxcb.cn/news/detail-439500.html
代碼
val myTextFlow = textflow { }
val keyword = "我的"
val itemTitle = "我的東西22ss11"
//這里轉(zhuǎn)為小寫處理,方便后面得到index
val itemTitleLowcase = itemTitle.toLowerCase()
val keywordLowcase = keyword.toLowerCase()
val keyWordLength = keyword.length
when {
itemTitleLowcase.startsWith(keywordLowcase) -> {
//關(guān)鍵字位于開頭
myTextFlow.apply {
label(itemTitle.substring(0, keyWordLength)) {
style {
backgroundColor += c("#ffff00")
}
}
label(itemTitle.substring(keyWordLength))
}
}
itemTitleLowcase.endsWith(keywordLowcase) -> {
val startIndex = itemTitleLowcase.indexOf(keywordLowcase)
//關(guān)鍵字位于結(jié)尾
myTextFlow.apply {
label(itemTitle.substring(0, startIndex))
label(itemTitle.substring(startIndex, itemTitleLowcase.length)) {
style {
backgroundColor += c("#ffff00")
}
}
}
}
else -> {
//關(guān)鍵字位于中間
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))
}
}
}
到了這里,關(guān)于JavaFx 關(guān)鍵字高亮文本實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!