java - 如何突出显示 javafx Textarea 中的文本?
问题描述
我正在 JavaFX 中构建一个记事本项目。现在,我添加了查找和替换功能。我将在一个文本框中键入一个单词,在另一个文本框中键入可替换的单词,然后替换它们。直到这里,工作正常。但我想添加一个功能,如果我在搜索框中写一个单词,记事本文本区域中的单词将被突出显示。我正在使用 JavaFX。我已经搜索了很多关于如何添加荧光笔的信息。但是他们中的大多数使用java swing。对于 JavaFX,我不知道如何添加荧光笔。
public void find_and_highlight(ActionEvent e)
{
String text=A1.getText();
String findtext=find.getText();
int text_ln=A1.getText().length();
int word_ln=find.getText().length();
for(int i=0;i<text_ln-word_ln;i++)
{
String sub=text.substring(i,i+word_ln);
if(sub.equals(findtext))
{
// what to do here
}
}
}
所以在上面的代码中,当我在“查找文本”字符串中写入一些文本并按下按钮时,该功能被激活。字符串“text”包含文本区域中的文本。如果找到搜索词,我想突出显示从索引 i 到索引 i+ word_ln 的文本。所以基本上我想要,
highlight(i, i + word_len);
希望我能得到帮助:)
解决方案
我认为没有直接的方法可以做到这一点,但您可以JFXHighlighter
从JFoenix尝试。这是一个例子:
JFXHighlighter highlighter = new JFXHighlighter();
highlighter.setPaint(Color.YELLOW);
TextArea textArea = new TextArea("This is my text");
Button highlightButton = new Button("Highlight");
VBox parent = new VBox(textArea, highlightButton);
highlightButton.setOnAction(event -> {
highlighter.highlight(parent, "text");
event.consume();
});
输出:
注意:您需要在文本TextArea
更改时重做突出显示。你可以简单地通过在textProperty()
.
Java 8 的 Maven 依赖项:
<!-- https://mvnrepository.com/artifact/com.jfoenix/jfoenix -->
<dependency>
<groupId>com.jfoenix</groupId>
<artifactId>jfoenix</artifactId>
<version>8.0.9</version>
</dependency>
Java 9+ 的 Maven 依赖项:
<!-- https://mvnrepository.com/artifact/com.jfoenix/jfoenix -->
<dependency>
<groupId>com.jfoenix</groupId>
<artifactId>jfoenix</artifactId>
<version>9.0.9</version>
</dependency>
推荐阅读
- android - Android 8 上的 Cordova 插件文件传输问题
- php - PHP PDO 数组结果返回但不适用于 IF
- vue.js - 在组件外部的 Vue JS 中改变一个 Prop
- angular - 运行时错误无法读取 null 的属性“环境” - Ionic Google Maps
- python - Keras 自定义损失错误:未知损失函数
- html - 如何在与 xpath 和 lxml 匹配的包含后找到 X 单元格的值
- selenium - 针对每个节点上的不同 URL 执行 Selenium Grid 测试套件
- mongodb - com.mongodb.MongoSocketReadException: Prematurelyreached end of stream..............如何解决
- python - 使用字符串变量滚动
- css - 尽管@media 在源 .css 中,但 CSS 媒体标签不适用于生产,而是在本地工作