java - DefaultHighlightPainter 在 JTextPane 中不断移动

标签 java swing highlight jtextpane

我目前正在开发一个应用程序,该应用程序可以读取大文本,并突出显示该文本中的特定子字符串。它有点有效...

但似乎(我不知道为什么)每次突出显示字符串时,highligt 都会不断变化。

public List<int[]> findString(String text) {        
    text = text.toLowerCase();

    List<int[]> highlightPositions = new ArrayList<int[]>();
    JTextPane pane = getTextPane();

    String paneText = pane.getText().toLowerCase();

    int end = 0;
    while (paneText.indexOf(text, end) != -1) {         

        int start = paneText.indexOf(text, end);
        end = start + text.length();        

        highlightPositions.add(new int[] {start, end});                 
    }

    try {
        highlight(highlightPositions);
    } catch (Exception ex) {
    }       
return null;
}

这是执行实际突出显示的代码

public void highlight(List<int[]> highlightPositions) throws BadLocationException {
    DefaultHighlighter.DefaultHighlightPainter highlightPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);

    JTextPane textPane = getTextPane();     

    for (int[] position : highlightPositions) {
        System.out.println("Highlight: " + position[0] + " : " + position[1]);
        textPane.getHighlighter().addHighlight(position[0], position[1], highlightPainter);

    }
}

有人知道如何解决这个问题吗?

编辑: 这是当我尝试突出显示“Device”一词时的外观。

Highlighting output

最佳答案

String paneText = pane.getText().toLowerCase();

不要使用getText()getText() 方法将返回带有平台行尾字符串的字符串,在 Windows 中为 \r\n。但是,文档仅存储 EOL 字符串的 \n,因此文档中每条额外行的偏移量都不匹配。

解决方案是使用:

String paneText = pane.getDocument().getText().toLowerCase();

参见Text and New Lines有关该问题的更完整信息。

关于java - DefaultHighlightPainter 在 JTextPane 中不断移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34288789/

相关文章:

java - 如何正确设置 jpanels 的大小?

c# - C# 中菜单的默认突出显示颜色是什么?

jquery - JavaScript : jQuery Datepicker - simple highlighting of specific days, 谁能帮忙? (来源内)

java - Envers - 未找到 MappedSuperclass 属性。 @AuditMappedBy 指向不存在的属性

java - 可以证明应该使用 "volatile"declare 的代码示例

java - Thread.sleep(xx) 但整个程序都 hibernate 了?

java - 面板上不需要的按钮绘画

java - 调整二维数组?

java - 画一条线指向鼠标

java - 在java中突出显示单词