与 JTextPane 关联的 StyledDocument 使用什么字体?默认情况下,它是否使用与 JTextPane 相同的字体?特别是,我想知道字体大小。
问问题
2392 次
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 回答