2012-01-21 65 views
2

我正在根據它們的位置對線的某些部分進行着色。基於位置的着色字

使用的庫是Swing。 組件是JTextPane。

StyledDocument doc = editorJTextPane.getStyledDocument(); 

Style styleRed = editorJTextPane.addStyle("Red", null); 
StyleConstants.setForeground(styleRed, Color.red); 
StyleConstants.setBold(styleRed, rootPaneCheckingEnabled); 

Style styleGreen = editorJTextPane.addStyle("Green", null); 
StyleConstants.setForeground(styleGreen, Color.green); 
StyleConstants.setBold(styleGreen, rootPaneCheckingEnabled); 

String[] allLines = editorJTextPane.getText().split("\n"); 

int offSet1 = 0; 
int offSet2 = 5; 

for(int i=0; i<allLines.length; i++) 
{ 
    line = allLines[i]; 
    lineLength = line.length() + 1; 

    doc.setCharacterAttributes(offSet1, 4, editorJTextPane.getStyle("Red"), true);  

    doc.setCharacterAttributes(offSet2, 15, editorJTextPane.getStyle("Green"), true); 

    offSet1 = offSet1 + lineLength; 
    offSet2 = offSet2 + lineLength; 
} 

當任一線路, doc.setCharacterAttributes(OFFSET1,4,editorJTextPane.getStyle( 「紅」),TRUE); 或 doc.setCharacterAttributes(offSet2,15,editorJTextPane.getStyle(「Green」),true);

被評論,它正在工作。當兩者同時存在,我得到的錯誤, 異常在線程 「AWT-EventQueue的-0」 顯示java.lang.NullPointerException 在javax.swing.text.DefaultStyledDocument.setCharacterAttributes(DefaultStyledDocument.java:507)

像要知道它是不是setCharacterAttributes在循環?

感謝

+0

謝謝,Hovercrft充滿鰻魚 – user1162286

+2

爲了更好地幫助,請發佈[SSCCE](http://sscce.org/)。 –

+0

你在哪裏定義'doc',你在哪裏定義'editorJTextPane'?從錯誤中可以看出問題是未初始化的對象... – apnorton

回答

0

您必須DefaultStyledDocument.java

public void setCharacterAttributes(int offset, int length, AttributeSet s, boolean replace) { 
     ....... 
     AttributeSet sCopy = s.copyAttributes();//Line 507 here 
     ....... 
    } 

使用JDK 7,線路507所以,你在通過的AttributeSet爲空。你發佈的代碼是爲我工作的,所以你的代碼必須在其他地方做錯了。