4

与 JTextPane 关联的 StyledDocument 使用什么字体?默认情况下,它是否使用与 JTextPane 相同的字体?特别是,我想知道字体大小。

4

2 回答 2

3

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;
}
于 2011-08-05T05:24:50.787 回答
2

相关UIManager键是TextPane.font. UIManager.get()可用于确定所选 L&F 的值。例如,在 Mac OS X 上,此代码产生以下控制台输出:

System.out.println(UIManager.get("TextPane.font"));

安慰:

com.apple.laf.AquaFonts$DerivedUIResourceFont[
    家庭=露西达格兰德,名字=露西达格兰德,风格=平原,尺寸=13]

附录:如本所示,默认为StyleContext.NamedStyle与 UI 默认匹配的 a:

命名样式:默认{
    名称=默认,字体样式=,
    FONT_ATTRIBUTE_KEY=com.apple.laf.AquaFonts$DerivedUIResourceFont[
        家庭=露西达格兰德,名字=露西达格兰德,风格=平原,尺寸=13],
    字体重量=正常,
    font-family=露西达格兰德,
    字体大小=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());
}
于 2011-08-05T00:11:06.163 回答