Java Swing에서 텍스트를 다루다 보면 JTextPane과 JEditorPane 중 어떤 것을 선택해야 할지 고민되는 경우가 많습니다. 두 컴포넌트는 비슷해 보이지만 용도와 기능 면에서 뚜렷한 차이가 있습니다.
핵심 요약
JTextPane은 JEditorPane을 확장한 클래스로, 글꼴, 텍스트 스타일, 색상 등 워드 프로세서 수준의 서식 기능을 제공합니다. 따라서 복잡하고 무거운 텍스트 처리 작업이 필요하다면 JTextPane을 사용하는 것이 좋습니다. 반면 JEditorPane은 HTML과 RTF 콘텐츠의 표시 및 편집을 지원하며, 직접 작성한 EditorKit으로 확장할 수도 있습니다.
JTextPane이란?
- JTextPane은 JEditorPane의 하위 클래스입니다.
- 이미지나 컴포넌트가 삽입된 스타일 문서(styled document)를 다룰 때 사용합니다.
- 그래픽으로 표현되는 속성(attribute)으로 마크업할 수 있는 텍스트 컴포넌트이며, 기본 모델로 DefaultStyledDocument를 사용합니다.
- 주요 메서드로는 addStyle(), getCharacterAttributes(), getStyledDocument(), setDocument(), setEditorKit(), setStyledDocument() 등이 있습니다.
예제 코드
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class JTextPaneTest {
public static void main(String args[]) throws BadLocationException {
JFrame frame = new JFrame("JTextPane Test");
Container cp = frame.getContentPane();
JTextPane pane = new JTextPane();
SimpleAttributeSet set = new SimpleAttributeSet();
StyleConstants.setBold(set, true);
pane.setCharacterAttributes(set, true);
pane.setText("Welcome to");
set = new SimpleAttributeSet();
StyleConstants.setItalic(set, true);
StyleConstants.setForeground(set, Color.blue);
Document doc = pane.getStyledDocument();
doc.insertString(doc.getLength(), " Tutorials ", set);
set = new SimpleAttributeSet();
StyleConstants.setFontSize(set, 20);
doc.insertString(doc.getLength(), " Point", set);
JScrollPane scrollPane = new JScrollPane(pane);
cp.add(scrollPane, BorderLayout.CENTER);
frame.setSize(375, 250);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
실행 결과

위 예제는 하나의 문서 안에서 굵게(bold), 기울임+파란색(italic), 글자 크기 20pt처럼 부분마다 서로 다른 스타일을 적용하는 방법을 보여줍니다. JTextPane은 문자 단위 속성 제어가 뛰어나기 때문에 이런 작업에 적합합니다.
JEditorPane이란?
- JEditorPane은 다양한 텍스트 형식을 표시할 수 있는 일종의 텍스트 영역입니다.
- 기본적으로 HTML과 RTF(Rich Text Format)를 지원하며, 특정 콘텐츠 유형을 처리하기 위한 자체 에디터 킷(editor kit)을 만들어 확장할 수 있습니다.
- setContentType() 메서드로 표시할 문서 유형을 선택하고, setEditorKit() 메서드로 사용자 정의 에디터를 명시적으로 설정할 수 있습니다.
예제 코드
import javax.swing.*;
public class JEditorPaneTest extends JFrame {
public JEditorPaneTest() {
setTitle("JEditorPane Test");
JEditorPane editorPane = new JEditorPane();
editorPane.setContentType("text/html");
editorPane.setText("<h1>Java</h1><p>is a general-purpose computer programming language that is concurrent, class-based, object-oriented, and specifically designed to have as few implementation dependencies as possible.</p>");
setSize(350, 275);
setContentPane(editorPane);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] a) {
new JEditorPaneTest();
}
}
실행 결과

위 예제에서는 setContentType("text/html")으로 콘텐츠 유형을 지정한 뒤 HTML 문자열을 설정했고, JEditorPane이 이를 해석하여 화면에 렌더링한 것을 확인할 수 있습니다.
언제 무엇을 사용해야 할까?
| 구분 | JTextPane | JEditorPane |
|---|---|---|
| 상속 관계 | JEditorPane의 하위 클래스 | JTextComponent의 하위 클래스 |
| 주요 용도 | 글꼴·색상·스타일 적용, 이미지/컴포넌트 삽입 등 고급 텍스트 편집 | HTML, RTF 등 다양한 형식의 콘텐츠 표시 및 편집 |
| 기본 모델 | DefaultStyledDocument | 콘텐츠 유형에 따라 자동 결정 |
| 확장 방법 | 문자·단락 속성(AttributeSet) 제어 중심 | 사용자 정의 EditorKit 작성으로 확장 |
정리하면, 리치 텍스트 편집기처럼 세밀한 서식 제어가 필요하면 JTextPane을, HTML이나 RTF 문서를 그대로 보여주거나 편집해야 한다면 JEditorPane을 선택하는 것이 바람직합니다.