与 JTextPane 关联的 StyledDocument 的字体

发布于 2024-11-28 03:36:26 字数 84 浏览 1 评论 0原文

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

What font does the StyledDocument associated with a JTextPane use? By default, does it use the same font as the JTextPane? In particular, I'm wondering about the font size.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萌面超妹 2024-12-05 03:36:26

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;
}

StyledDocument is just interface. Interface doesn't have any font.

If you take a look at the DefaultStyledDocument class (implementing the interface).

public Font getFont(AttributeSet attr) {
    StyleContext styles = (StyleContext) getAttributeContext();
    return styles.getFont(attr);
}

Then in the StyleContext's sources

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);
}

Then in the StyleConstants.

public static int getFontSize(AttributeSet a) {
    Integer size = (Integer) a.getAttribute(FontSize);
    if (size != null) {
        return size.intValue();
    }
    return 12;
}
关于从前 2024-12-05 03:36:26

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

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

Console:

com.apple.laf.AquaFonts$DerivedUIResourceFont[
    family=Lucida Grande,name=Lucida Grande,style=plain,size=13]

Addendum: As shown in this 示例,默认为StyleContext.NamedStyle与 UI 默认值匹配的

NamedStyle:default {
    name=default,font-style=,
    FONT_ATTRIBUTE_KEY=com.apple.laf.AquaFonts$DerivedUIResourceFont[
        family=Lucida Grande,name=Lucida Grande,style=plain,size=13],
    font-weight=normal,
    font-family=Lucida Grande,
    font-size=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());
}

The relevant UIManager key is TextPane.font. UIManager.get() may be used to determine the value for a chosen L&F. For example, on Mac OS X, this code produces the following console output:

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

Console:

com.apple.laf.AquaFonts$DerivedUIResourceFont[
    family=Lucida Grande,name=Lucida Grande,style=plain,size=13]

Addendum: As shown in this example, the default is a StyleContext.NamedStyle that matches the UI default:

NamedStyle:default {
    name=default,font-style=,
    FONT_ATTRIBUTE_KEY=com.apple.laf.AquaFonts$DerivedUIResourceFont[
        family=Lucida Grande,name=Lucida Grande,style=plain,size=13],
    font-weight=normal,
    font-family=Lucida Grande,
    font-size=4,
}

Addendum: Here's the code to iterate through the pane's styles:

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());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文