Получение необработанного текста от JTextPane

Снаружи класса определения, как @Telos упоминания, можно только использовать EventHandler на левой стороне += или -=. Так, если у Вас есть способность изменить класс определения, Вы могли бы предоставить метод для выполнения проверки путем проверки, ли обработчик событий null - если так, то никакой обработчик событий не был добавлен. В противном случае тогда, возможно, и можно циклично выполниться через значения в Делегат. GetInvocationList. Если Вы равны делегату, которого Вы хотите добавить как обработчик событий, то Вы знаете, что это там.

public bool IsEventHandlerRegistered(Delegate prospectiveHandler)
{   
    if ( this.EventHandler != null )
    {
        foreach ( Delegate existingHandler in this.EventHandler.GetInvocationList() )
        {
            if ( existingHandler == prospectiveHandler )
            {
                return true;
            }
        }
    }
    return false;
}

И это могло легко быть изменено для становления, "добавьте обработчик, если это не там". Если у Вас нет доступа к внутренностям класса, это представляет событие, Вы, возможно, должны исследовать -= и +=, как предложил @Lou Franco.

Однако можно быть более обеспеченным повторным исследованием путем, Вы уполномочиваете и списываете эти объекты, чтобы видеть, не можете ли Вы найти способ отследить эту информацию сами.

7
задан Romain Linsolas 7 December 2009 в 12:27
поделиться

4 ответа

На основе принятого ответа на: Удаление HTML из строки Java

MyHtml2Text parser = new MyHtml2Text();
try {
    parser.parse(new StringReader(myTextPane.getText()));
} catch (IOException ee) {
  //handle exception
}
System.out.println(parser.getText());

Слегка измененная версия класса Html2Text , найденная в ответе, который я связал с

import java.io.IOException;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;

public class MyHtml2Text extends HTMLEditorKit.ParserCallback {
    StringBuffer s;
    public MyHtml2Text() {}
    public void parse(Reader in) throws IOException {
        s = new StringBuffer();
        ParserDelegator delegator = new ParserDelegator();
        delegator.parse(in, this, Boolean.TRUE);
    }
    public void handleText(char[] text, int pos) {
        s.append(text);
        s.append("\n");
    }
    public String getText() {
        return s.toString();
    }
}

Если вам нужна более детальная обработка, подумайте о реализации большего количества интерфейса, определенного HTMLEditorKit.ParserCallback

5
ответ дан 6 December 2019 в 06:50
поделиться

К сожалению, придется делать это самому. Представьте, что какое-то содержимое было специфичным для HTML, например изображения - текстовое представление нечеткое. Включать альтернативный текст или нет, например.

2
ответ дан 6 December 2019 в 06:50
поделиться

Нет необходимости использовать ParserCallback. Просто используйте:

textPane.getDocument().getText(0, textPane.getDocument().getLength()) );
17
ответ дан 6 December 2019 в 06:50
поделиться

(Разрешено ли RegExp? Это не синтаксический анализ, не так ли)

Возьмите результат getText () и используйте String.replaceAll () для фильтрации всех тегов. Чем trim (), чтобы удалить начальные и конечные пробелы. Для пробелов между вашим первым и последним «blabla» я не вижу общего решения. Может быть, вы можете пролить остальное вокруг CRLF и снова обрезать все строки.

(Я не эксперт по регулярным выражениям - может быть, кто-то сможет предоставить регулярное выражение и заработать некоторую репутацию;))

Изменить

.. Я просто предположил что вы не используете < и > в своем тексте - иначе это .. скажем, это проблема.

2
ответ дан 6 December 2019 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: