Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java Swing에서 JTextPane과 JEditorPane의 차이점 완벽 정리

Java Swing에서 텍스트를 다루다 보면 JTextPaneJEditorPane 중 어떤 것을 선택해야 할지 고민되는 경우가 많습니다. 두 컴포넌트는 비슷해 보이지만 용도와 기능 면에서 뚜렷한 차이가 있습니다.

핵심 요약

JTextPaneJEditorPane을 확장한 클래스로, 글꼴, 텍스트 스타일, 색상 등 워드 프로세서 수준의 서식 기능을 제공합니다. 따라서 복잡하고 무거운 텍스트 처리 작업이 필요하다면 JTextPane을 사용하는 것이 좋습니다. 반면 JEditorPaneHTMLRTF 콘텐츠의 표시 및 편집을 지원하며, 직접 작성한 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);
    }
}

실행 결과

Java Swing에서 JTextPane과 JEditorPane의 차이점 완벽 정리

위 예제는 하나의 문서 안에서 굵게(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();
    }
}

실행 결과

Java Swing에서 JTextPane과 JEditorPane의 차이점 완벽 정리

위 예제에서는 setContentType("text/html")으로 콘텐츠 유형을 지정한 뒤 HTML 문자열을 설정했고, JEditorPane이 이를 해석하여 화면에 렌더링한 것을 확인할 수 있습니다.

언제 무엇을 사용해야 할까?

구분JTextPaneJEditorPane
상속 관계JEditorPane의 하위 클래스JTextComponent의 하위 클래스
주요 용도글꼴·색상·스타일 적용, 이미지/컴포넌트 삽입 등 고급 텍스트 편집HTML, RTF 등 다양한 형식의 콘텐츠 표시 및 편집
기본 모델DefaultStyledDocument콘텐츠 유형에 따라 자동 결정
확장 방법문자·단락 속성(AttributeSet) 제어 중심사용자 정의 EditorKit 작성으로 확장

정리하면, 리치 텍스트 편집기처럼 세밀한 서식 제어가 필요하면 JTextPane을, HTML이나 RTF 문서를 그대로 보여주거나 편집해야 한다면 JEditorPane을 선택하는 것이 바람직합니다.