2010-05-14 73 views
2

我想爲文本區域中的特定行設置顏色。 我迄今爲止的發現,是下面的如何在JTextArea中設置部分文字顏色?

// Declarations 
private final DefaultStyledDocument document; 
private final MutableAttributeSet homeAttributeSet; 
private final MutableAttributeSet awayAttributeSet; 

// Usage in the form constructor 
jTextAreaLog.setDocument(document); 
homeAttributeSet = new SimpleAttributeSet(); 
StyleConstants.setForeground(homeAttributeSet, Color.blue); 
StyleConstants.setItalic(homeAttributeSet, true); 
awayAttributeSet = new SimpleAttributeSet(); 
StyleConstants.setForeground(awayAttributeSet, Color.red); 

// Setting the style of the last line 
final int start = jTextAreaLog.getLineStartOffset(jTextAreaLog.getLineCount() - 2); 
final int length = jTextAreaLog.getLineEndOffset(jTextAreaLog.getLineCount() - 1) -  start; 
document.setCharacterAttributes(start, length, awayAttributeSet, true); 

但是,這是行不通的。我究竟做錯了什麼?

編輯:好的,我一直在努力的事情了,我試着用

final int end = jTextAreaLog.getLineEndOffset(jTextAreaLog.getLineCount() - 1); 
document.insertString(end, "someText", awayAttributeSet); 

,而不是添加添加,然後再造型的文字,但都無濟於事。

+2

JTextArea不支持樣式文本。使用JTextPane。 – camickr 2010-05-15 03:45:09

回答

9

我不確定JTextArea是否可以在很多細節中進行樣式設計,因爲它可能會從選定的字體,顏色等設置整個文檔的樣式。使用JTextPane/JEditorPane可能會帶來更多運氣。

編輯:根據JavaDoc

JTextArea是一個多線面積 顯示文本。

(重點添加)。

如果你可以移動到的JTextPane,然後將呈現的格式。

+0

JTextArea支持StyleDocuments和屬性,我無法找到它不應該支持文本樣式的原因! – 2010-05-14 23:04:59

+1

我沒有試過這個,但看着代碼,BasicTextAreaUI只創建PlainView實例。 JTextArea可能會接受一個樣式化的文檔,但是您確定它會渲染它嗎?我知道JTextPane對StyledDocument有明確的支持。 – mdma 2010-05-14 23:27:35

0

創建一個擴展例如PlainDocument的自定義swing文件,並擁有一個負責繪製令牌的自定義HighlightedView。

相關問題