2011-08-04 51 views

回答

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

相關UIManager關鍵是TextPane.fontUIManager.get()可以被用於確定用於所選擇的大號& F.例如值,Mac OS X上,此代碼產生以下控制檯輸出:

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

控制檯:

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

附錄:作爲在此example中,默認是StyleContext.NamedStyle相匹配的用戶界面默認:

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

附錄:這裏的C以迭代窗格的樣式:

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()); 
} 
+0

從經驗上來說,這個默認值一直存在,直到它改變了,但我從來沒有追趕過它。 – trashgod