Шрифт StyledDocument, связанный с JTextPane
Какой шрифт использует StyledDocument, связанный с JTextPane? По умолчанию он использует тот же шрифт, что и JTextPane? В частности, меня интересует размер шрифта.
2 ответа
Решение
StyledDocument - это просто интерфейс. Интерфейс не имеет шрифта.
Если вы посмотрите на класс DefaultStyledDocument (реализующий интерфейс).
public Font getFont(AttributeSet attr) {
StyleContext styles = (StyleContext) getAttributeContext();
return styles.getFont(attr);
}
Затем в источниках StyleContext
public Font getFont(AttributeSet attr) {
// PENDING(prinz) add cache behavior
int style = Font.PLAIN;
if (StyleConstants.isBold(attr)) {
style |= Font.BOLD;
}
if (StyleConstants.isItalic(attr)) {
style |= Font.ITALIC;
}
String family = StyleConstants.getFontFamily(attr);
int size = StyleConstants.getFontSize(attr);
/**
* if either superscript or subscript is
* is set, we need to reduce the font size
* by 2.
*/
if (StyleConstants.isSuperscript(attr) ||
StyleConstants.isSubscript(attr)) {
size -= 2;
}
return getFont(family, style, size);
}
Тогда в StyleConstants.
public static int getFontSize(AttributeSet a) {
Integer size = (Integer) a.getAttribute(FontSize);
if (size != null) {
return size.intValue();
}
return 12;
}
Подходящий UIManager
ключ TextPane.font
, UIManager.get()
может использоваться для определения значения для выбранного L&F. Например, в Mac OS X этот код создает следующий вывод консоли:
System.out.println(UIManager.get("TextPane.font"));
Приставка:
com.apple.laf.AquaFonts $ DerivedUIResourceFont [ семья =Lucida Grande, имя =Lucida Grande, стиль = обычный, размер =13]
Приложение: Как показано в этом примере, по умолчанию StyleContext.NamedStyle
это соответствует пользовательскому интерфейсу по умолчанию:
NamedStyle: default { имя = по умолчанию, стиль шрифта =, FONT_ATTRIBUTE_KEY=com.apple.laf.AquaFonts$DerivedUIResourceFont[ семья =Lucida Grande, имя =Lucida Grande, стиль = обычный, размер =13], начертание шрифта = нормальное, font-family=Lucida Grande, размер шрифта =4, }
Приложение: Вот код для перебора стилей панели:
JTextPane jtp = new JTextPane();
...
HTMLDocument doc = (HTMLDocument) jtp.getDocument();
StyleSheet styles = doc.getStyleSheet();
Enumeration rules = styles.getStyleNames();
while (rules.hasMoreElements()) {
String name = (String) rules.nextElement();
Style rule = styles.getStyle(name);
System.out.println(rule.toString());
}