首页 > 解决方案 > 如何突出显示 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);

希望我能得到帮助:)

标签: javajavafxprojecthighlightnotepad

解决方案


我认为没有直接的方法可以做到这一点,但您可以JFXHighlighterJFoenix尝试。这是一个例子:

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>

推荐阅读