Читать текст построчно в JTextPane - PullRequest
1 голос
/ 02 апреля 2011

Я пишу редактор с подсветкой синтаксиса. Я хочу получить текущую строку и просто проанализировать ее вместо всего документа. Проблема в том, что я, вероятно, делаю это неправильно, но я не знаю почему. Вот что я делаю:

public void keyReleased(KeyEvent e) {
    System.out.println(e);
    try {
    int inizio = Utilities.getRowStart(ta, ta.getCaretPosition());
    int fine = Utilities.getRowEnd(ta, ta.getCaretPosition());
    System.out.println("Inizio: " + inizio + " - Fine: " + fine);
    Element root = ta.getDocument().getDefaultRootElement();
    if(inizio == fine) System.out.println("Mi trovo ad inizio riga");
    else {
        int linea = RXTextUtilities.getLineAtCaret(ta);
        System.out.println("Linea: " + linea);
        Element child = root.getElement(linea-1);
        System.out.println("Testo corrente: " + child.getDocument().getLength() );
    }
    } catch (BadLocationException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

Мое понимание использования javax.swing.text.Element заключалось в том, что я могу получить только ту строку, которую хочу (ребенок), и затем работать над этим, но child.getDocument.getLength() дает мне длину всего документа. Что я делаю не так?

edit # 1:

child.getDocument.getLength() дает мне длину от начала документа, я ожидаю текущую длину строки. Смотрите: я получил свой номер строки, используя int linea = RXTextUtilities.getLineAtCaret(ta);, затем извлекаю строку, используя root.getElement (linea-1), поэтому я ожидал, что child.getDocument().getLength() даст мне длину текущей строки.

Ссылка RXTextUtilities: http://www.camick.com/java/source/RXTextUtilities.java

1 Ответ

2 голосов
/ 02 апреля 2011

Для вашего конкретного случая вы получаете длину всего документа, потому что child.getDocument() фактически возвращает документ, в который встроен дочерний элемент.

Вы можете использовать child.getStartOffset() и child.getEndOffset(), чтобы определить началои заканчивайте внутри документа, а затем вырежьте текст из всего документа.

int start = child.getStartOffset();
int end = child.getEndOffset();
int length = end - start;
String text = child.getDocument().getText(start, length);

Обратите внимание, что текст также содержит разделитель EOL.

...