gpt4 book ai didi

java - 使用开始和结束偏移突出显示 JTextArea 中特定行上的文本

转载 作者:行者123 更新时间:2023-12-04 05:06:37 25 4
gpt4 key购买 nike

我有一种方法可以突出显示文本区域中出现的所有单词。有什么方法可以使用开始和结束偏移来突出显示该行中的单词。

我目前的代码。

public static void highlight(JTextComponent textComp, String pattern) {

try {
Highlighter hilite = textComp.getHighlighter();
javax.swing.text.Document doc = textComp.getDocument();
String text = doc.getText(0, doc.getLength());
int pos = 0;

// Search for pattern
while ((pos = text.indexOf(pattern, pos)) >= 0) {
// Create highlighter using private painter and apply around pattern
hilite.addHighlight(pos, pos + pattern.length(), painter2);
pos += pattern.length();
}
} catch (BadLocationException e) {
}
}

这是在执行 JButton 操作时调用的:
highlight(textArea_1, "in");

结果:
enter image description here

我尝试使用开始和结束偏移方法,但没有运气。我尝试仅在第 6 行突出显示“in”。对此非常感谢的任何帮助。
static int iline =6;

public static void highlight(JTextComponent textComp, String pattern) {

try {
Highlighter hilite = textComp.getHighlighter();
javax.swing.text.Document doc = textComp.getDocument();
int start =((JTextArea) textComp).getLineStartOffset(iline);
int end = ((JTextArea) textComp).getLineEndOffset(iline);
String text = doc.getText(start,end);
int pos = start;

// Search for pattern
while ((pos = text.indexOf(pattern, pos)) >= start) {
// Create highlighter using private painter and apply around pattern
hilite.addHighlight(pos, pos + pattern.length(), painter2);
pos += pattern.length();
}
} catch (BadLocationException e) {
}
}

最佳答案

int start =((JTextArea) textComp).getLineStartOffset(iline);
int end = ((JTextArea) textComp).getLineEndOffset(iline);
String text = doc.getText(start,end);
int pos = start;

假设我们每行有 10 个字符。因此,如果您想要第 6 行的文本,则开始变量将等于 51,结束变量将等于 60。

当您获得第 6 行的文本时,它将仅包含 10 个字符。

因此,当您在 51 处开始搜索时,您已经位于搜索字符串的末尾,因此您不会获得任何匹配项。

您只需要在偏移量 0 处开始搜索,然后当您添加高亮时,您需要将 start 的值添加到高亮偏移中。

关于java - 使用开始和结束偏移突出显示 JTextArea 中特定行上的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15458041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com