Определение смещения текста строки JTextArea при переносе - PullRequest
0 голосов
/ 02 марта 2011

Я пытаюсь определить границы строки текста в моей текстовой области.Я знаю, что могу определить границы для смещения, а это значит, что мне нужно знать смещение начала и конца линии.

Поэтому я подумал, что попробую использовать методы getLine*, но этоне дал ожидаемого результата.

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.text.DefaultHighlighter;

public class TextAreaLineBoundsTest
{
    public static void main(String[] args) throws Exception
    {
        String string = "Lorem ipsum eum putant gubergren evertitur in, no assueverit vituperatoribus eum. Ea cibo offendit vim, est et vivendum qualisque prodesset. Vis doctus expetenda contentiones an, no ius mazim epicuri expetendis, saperet salutandi forensibus ne usu. Ex fugit alterum usu. His ignota cotidieque in, augue erroribus eam no.";
        JTextArea textArea = new JTextArea(string);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);

        String term = "qualisque";
        int termOffset = string.indexOf(term);

        int termLine = textArea.getLineOfOffset(termOffset);
        int termLineStartOffset = textArea.getLineStartOffset(termLine);
        int termLineEndOffset = textArea.getLineEndOffset(termLine);

        textArea.getHighlighter().addHighlight(termLineStartOffset, termLineEndOffset, new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW));

        JScrollPane textAreaScroll = new JScrollPane(textArea);

        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());
        frame.add(textAreaScroll, BorderLayout.CENTER);
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Выделен весь абзац текста, но я просто хочу строку, которая содержит искомый термин.

1 Ответ

1 голос
/ 02 марта 2011
import java.awt.*;
import javax.swing.*;
import javax.swing.text.DefaultHighlighter;

public class TextAreaLine
{
    public static void main(String[] args) throws Exception
    {
        String string = "Lorem ipsum eum putant gubergren evertitur in, no assueverit vituperatoribus eum. Ea cibo offendit vim, est et vivendum qualisque prodesset. Vis doctus expetenda contentiones an, no ius mazim epicuri expetendis, saperet salutandi forensibus ne usu. Ex fugit alterum usu. His ignota cotidieque in, augue erroribus eam no.";
        JTextArea textArea = new JTextArea(string);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        JScrollPane textAreaScroll = new JScrollPane(textArea);

        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());
        frame.add(textAreaScroll, BorderLayout.CENTER);
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        String term = "qualisque";
        int termOffset = string.indexOf(term);
        Rectangle view = textArea.modelToView(termOffset);
        int startOffset = textArea.viewToModel(new Point(0, view.y));
        int endOffset = textArea.viewToModel(new Point(textArea.getSize().width, view.y) );
        textArea.getHighlighter().addHighlight(startOffset, endOffset, new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW));
    }
}
...