Выделите текст в определенной строке в JTextArea, используя Start и End Offset
У меня есть метод, который выделяет все вхождения слова в текстовой области. Есть ли способ использовать начальное и конечное смещение, чтобы выделить слово только в этой строке.
Мои текущие коды.
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");
Результат:
Я попытался использовать метод начального и конечного смещения, но безуспешно. Я попытался выделить "в" только в строке 6. Любая помощь по этому вопросу очень ценится.
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) {
}
}
2 ответа
Получил это работает Спасибо @camickr
Код:
public static void highlight(JTextComponent textComp, String pattern) {
try {
Highlighter hilite = textComp.getHighlighter();
String text = textComp.getText();
String line =null;
int start = 0;
int end;
int totalLines = ((JTextArea) textComp).getLineCount();
for (int i=0; i < totalLines; i++) {
if(i==5){ //Line Numbers Decrement by 1
start = ((JTextArea) textComp).getLineStartOffset(i);
end = ((JTextArea) textComp).getLineEndOffset(i);
line = text.substring(start, end);
System.out.println("My Line: " + line);
System.out.println("Start Position of Line: " + start);
System.out.println("End Position of Line: " + end);
}
}
int pos = start;
// Search for pattern
if ((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, а затем, когда вы добавляете выделение, вам нужно добавить значение начала к смещению выделения.