2010-05-14 3 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

답변

9

JTextArea가 너무 자세하게 스타일을 지정할 수 있는지 확실하지 않습니다. JTextArea가 선택된 글꼴, 색상 등의 전체 문서에 대한 스타일을 설정하기 때문입니다. JTextPane/JEditorPane을 사용하면 더 많은 행운을 가질 수 있습니다.

편집 : javadoc 내에서

JTextArea에 멀티 라인 영역이 표시 일반 텍스트입니다.

(강조는 추가됩니다.)

당신이 JTextPane가 이동할 수 있다면, 그 서식을 렌더링합니다.

+0

JTextArea는 StyleDocuments 및 속성을 지원하므로 텍스트 스타일을 지원해서는 안되는 이유를 찾을 수 없습니다! –

+1

나는 이것을 시도하지는 않았지만 코드를 살펴보면 BasicTextAreaUI는 PlainView 인스턴스 만 생성합니다. JTextArea는 스타일이 지정된 문서를 받아 들일 수 있지만 렌더링하는 것이 확실합니까? 나는 JTextPane이 StyledDocument를 명시 적으로 지원한다는 것을 안다. – mdma

0

예를 들어 PlainDocument로 확장 된 사용자 지정 스윙 문서를 만들고 토큰을 그리는 사용자 지정 HighlightedView를 사용합니다.

관련 문제