Стилизация HTML в JEditorPane или JTextPane

Я хочу отображать HTML в JEditorPane или JTextPane, но я хочу, чтобы стиль (размер шрифта) исходил из Look and Feel. Есть ли способ сделать это или вам нужно использовать встроенный стиль HTML?

Вот пример:

epText = new JEditorPane("text/html", content);

StyleSheet ss = ((HTMLEditorKit)epText.getEditorKit()).getStyleSheet();
ss.addRule("p {font-size:" + FontManager.getManager().getFontSize() + "}");
HTMLEditorKit kit = (HTMLEditorKit) epText.getEditorKit();
kit.setStyleSheet(ss);

epText.setEditorKit(kit);

Всякий раз, когда я устанавливаю комплект редактора, весь текст исчезает. Нужно ли каждый раз устанавливать текст?


person jmcmahon    schedule 23.03.2010    source источник


Ответы (2)


да.

Изучите этот фрагмент из Java API для HTMLEditorKit:

Кастомизация из текущего LAF

HTML предоставляет хорошо известный набор функций без точного указания характеристик отображения. Swing имеет механизм тем для своих реализаций внешнего вида. Желательно, чтобы внешний вид передал характеристики отображения в представления HTML. Пользователю с плохим зрением, например, нужен высококонтрастный и крупный шрифт.

Поддержка этого обеспечивается классом StyleSheet. На представление HTML может сильно повлиять настройка свойства StyleSheet в EditorKit.

Редактировать: когда вы устанавливаете Editor Kit, он удаляет старый комплект и устанавливает новый. Это изменяет базовую модель, поэтому текст «исчезает». Прочтите API для получения дополнительной информации.

Но вам может не понадобиться заново создавать весь комплект... просто добавьте новый лист в свой стиль.

person Timothy    schedule 23.03.2010

Вызовите это из метода main после установки L&F.

public static void setDefaultStyle()
{
    // looks like WTF but that is the way to set default CSS
    StyleSheet sheet=new HTMLEditorKit().getStyleSheet();
    // add your rules
    sheet.addRule("...");
    sheet.addRule("...");
}

EDIT: По крайней мере, это должно работать для JTextPane.

person Ha.    schedule 23.03.2010