我正在使用JTextPane。
JTextPane pane = new JTextPane();
String content = "I'm a line of text that will be displayed in the JTextPane";
StyledDocument doc = pane.getStyledDocument();
SimpleAttributeSet aSet = new SimpleAttributeSet();
如果我将此
aSet
添加到文本窗格的文档中,如下所示:doc.setParagraphAttributes(0, content.length(), aSet, false);
什么都看不见。没什么大惊喜,因为我没有为
aSet
设置任何自定义属性。但是,如果我允许aSet
这样替换doc
的当前ParagraphAttributes,则:doc.setParagraphAttributes(0, content.length(), aSet, true);
发生了很多事情。如何获得有关JTextPane文档的那些默认值的信息?特别是我的问题是,当我为
aSet
定义自定义字体并将其设置为替换当前属性时,该字体显示为粗体。 StyleConstants.setBold(aSet, false);
没有帮助。 最佳答案
我查看了source code来查看哪些数据结构正在保存所需的信息。这是对代码的修改,该代码显示每个段落的属性。
int offset, length; //The value of the first 2 parameters in the setParagraphAttributes() call
Element section = doc.getDefaultRootElement();
int index0 = section.getElementIndex(offset);
int index1 = section.getElementIndex(offset + ((length > 0) ? length - 1 : 0));
for (int i = index0; i <= index1; i++)
{
Element paragraph = section.getElement(i);
AttributeSet attributeSet = paragraph.getAttributes();
Enumeration keys = attributeSet.getAttributeNames();
while (keys.hasMoreElements())
{
Object key = keys.nextElement();
Object attribute = attributeSet.getAttribute(key);
//System.out.println("key = " + key); //For other AttributeSet classes this line is useful because it shows the actual parameter, like "Bold"
System.out.println(attribute.getClass());
System.out.println(attribute);
}
}
通过
setText()
方法添加了一些文本的简单textPane的输出给出:class javax.swing.text.StyleContext$NamedStyle
NamedStyle:default {foreground=sun.swing.PrintColorUIResource[r=51,g=51,b=51],size=12,italic=false,name=default,bold=false,FONT_ATTRIBUTE_KEY=javax.swing.plaf.FontUIResource[family=Dialog,name=Dialog,style=plain,size=12],family=Dialog,}
关于您的特定问题,查看related SO question,我已经可以使用以下方式将段落文本设置为粗体:
StyleContext sc = StyleContext.getDefaultStyleContext();
AttributeSet aSet = sc.addAttribute(aSet, StyleConstants.Bold, true);
在这种情况下,
aSet
的类是javax.swing.text.StyleContext$SmallAttributeSet
,这是不可变的(不实现MutableAttributeSet
)。对于您的情况,大致如下:aSet.addAttribute(StyleConstants.Bold, true);
应该管用。