作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发一个应用程序,该应用程序可以读取大文本,并突出显示该文本中的特定子字符串。它有点有效...
但似乎(我不知道为什么)每次突出显示字符串时,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”一词时的外观。
最佳答案
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/
我目前正在开发一个应用程序,该应用程序可以读取大文本,并突出显示该文本中的特定子字符串。它有点有效... 但似乎(我不知道为什么)每次突出显示字符串时,highligt 都会不断变化。 public
我有 JTextPane 对象。我添加了 DefaultHighlighter.DefaultHighlightPainter 荧光笔,如下所示: DefaultHighlighter.Default
我是一名优秀的程序员,十分优秀!