2014-04-06 51 views
0

我正在使用JTextPane。如何找到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到textpane的文件是這樣的:

doc.setParagraphAttributes(0, content.length(), aSet, false); 

沒有可見發生。沒有大的驚喜,因爲我沒有爲aSet設置任何自定義屬性。但是,如果我讓aSet更換的doc當前ParagraphAttributes這樣的:

doc.setParagraphAttributes(0, content.length(), aSet, true); 

很多事情發生。我如何獲得有關JTextPane文檔的這些默認值的信息?特別是我的問題是,當我爲aSet定義自定義字體並將其設置爲替換當前屬性時,字體顯示爲粗體。 StyleConstants.setBold(aSet, false);沒有幫助。

回答

3

我已查看了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); 
    } 
} 

一個簡單的textPane通過該setText()方法添加一些文本的輸出提供:

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

在這種情況下的類的aSetjavax.swing.text.StyleContext$SmallAttributeSet其不是可變的(不即時plements MutableAttributeSet)。爲你的情況沿線︰

aSet.addAttribute(StyleConstants.Bold, true); 

應該工作。

+0

設置aSet的屬性我使用'StyleConstants.setFontFamily(aSet,「Times New Roman」);'而且工作完全正常:)。你的回答告訴我,我認爲是粗體的文本是從默認的'[r = 51,g = 51,b = 51]'重置爲'[r = 0,g = 0,b = 0'的顏色屬性(前景) ]'。非常感謝你,非常樂於助人! – user2651804

+0

@ user2651804很高興能幫到你!注意'StyleConstants.setXXX(aMutableSet,value)'方法存在於comodity中,它們只是調用'aMutableSet.addAttribute(StyleConstants.XXX,value)'。 [實施例](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/javax/swing/text/StyleConstants.java#StyleConstants.setFontFamily%28javax.swing。 text.MutableAttributeSet%2Cjava.lang.String%29)。 – DSquare

+0

這些類型的東西,旨在讓我們的生活更輕鬆,最終使一個新的Java程序員的生活複雜化,我猜... – user2651804