JAVA

[JAVA] JTextPane 스타일 사용법

Coding🌱 2025. 5. 14. 01:58
반응형
SMALL

JTextPane은 Java Swing 라이브러리에서 제공하는 텍스트 편집 컴포넌트로 다양한 형식의 텍스트를 표시하고 편집할 수 있는 강력한 기능을 제공합니다. 단순한 텍스트 출력에 그치지 않고 스타일링, 하이퍼링크, 이미지 삽입 등도 지원하여 복잡한 텍스트 기반 사용자 인터페이스를 구축할 수 있습니다.

JTextPaneJTextArea와 유사하지만 더 확장된 기능을 제공합니다. JTextArea가 기본적인 텍스트 입력과 출력만 처리하는 반면 JTextPane은 StyledDocument를 기반으로 텍스트의 특정 부분에 서로 다른 스타일을 적용할 수 있습니다. 굵은 글씨나 기울임, 밑줄뿐 아니라 글꼴 색상과 크기 조정도 자유롭게 설정할 수 있으며 이미지와 하이퍼링크도 삽입할 수 있어 보다 풍부한 표현이 가능합니다.

이 글에서는 JTextPane의 기본 사용법과 함께 텍스트 스타일을 적용하는 방법을 다루겠습니다.

1 기본 사용법
 
 
 
JAVA
JFrame frame = new JFrame();
JTextPane textPane = new JTextPane();
frame.add(textPane);
2 스크롤 기능 추가

JTextPane은 다양한 텍스트를 입력하고 표시할 수 있는 강력한 컴포넌트지만 스크롤 기능은 기본적으로 제공하지 않습니다. 따라서 텍스트가 컴포넌트의 크기를 초과하면 초과된 내용은 화면에 표시되지 않게 됩니다.

이러한 문제를 해결하려면 JTextPane을 JScrollPane으로 감싸서 외부에서 스크롤 기능을 추가해주어야 합니다. 이렇게 하면 텍스트가 많아지더라도 사용자가 스크롤을 통해 전체 내용을 손쉽게 확인할 수 있습니다.

 
 
 
JAVA
// 방법1
frame.add(new JScrollPane(textPane));

//방법2
JScrollPane scrollPane = new JScrollPane(textPane);
frame.add(scrollPane);
3 스타일 설정
3-1 텍스트 스타일 적용 방식

텍스트 스타일 적용 방식은 문서나 애플리케이션에서 특정 텍스트에 시각적 효과(예: 굵게, 기울임, 밑줄, 색상 등)를 추가하여 강조하거나 의미를 구분하는 방법을 말합니다. 사용자는 보통 선택한 텍스트나 이후 입력할 텍스트에 스타일을 적용하며 이는 가독성을 높이고 정보를 효과적으로 전달하는 데 도움을 줍니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
JTextPane textPane = new JTextPane();
frame.add(new JScrollPane(textPane));

SimpleAttributeSet attr = new SimpleAttributeSet();
// 스타일 설정 ↓↓↓
StyleConstants.yourStyleHere(attr, true);
// 스타일 설정 ↑↑↑ 
textPane.setCharacterAttributes(attr, true);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
JTextPane textPane = new JTextPane();
frame.add(new JScrollPane(textPane));

    JButton Button = new JButton("스타일 변경");
    Button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // 스타일 설정 ↓↓↓
        toggleStyle(textPane, isStyleApplied, applyStyle);
        // 스타일 설정 ↑↑↑ 
    }
});

frame.add(Button, BorderLayout.SOUTH);

----------------------------------------------------------

/**
* @param textPane        대상 JTextPane
* @param isStyleApplied  현재 스타일 적용 여부 확인 함수
* @param applyStyle      스타일 적용 함수
*/
private static void toggleStyle(JTextPane textPane, 
                                Function<AttributeSet, Boolean> isStyleApplied, 
                                BiConsumer<SimpleAttributeSet, Boolean> applyStyle) {

    StyledDocument doc = textPane.getStyledDocument();
    int start = textPane.getSelectionStart();
    int end = textPane.getSelectionEnd();
    SimpleAttributeSet attr = new SimpleAttributeSet();

    if (start != end) {
        AttributeSet currentAttr = doc.getCharacterElement(start).getAttributes();
        boolean isApplied = isStyleApplied.apply(currentAttr);
        applyStyle.accept(attr, !isApplied);
        doc.setCharacterAttributes(start, end - start, attr, false);
    } else {
        MutableAttributeSet inputAttr = textPane.getInputAttributes();
        boolean isApplied = isStyleApplied.apply(inputAttr);
        applyStyle.accept(attr, !isApplied);
        textPane.setCharacterAttributes(attr, true);
    }
}
3-1-1굵은 스타일

JTextPane에서는 StyleConstants.setBold 메서드를 활용해 텍스트에 굵은 스타일을 적용할 수 있으며 중요한 단어나 제목 강조할 문장을 시각적으로 돋보이게 할 때 유용합니다.

  • 입력 전에 스타일 미리 설정

 
 
 
JAVA
StyleConstants.setBold(attr, true);
  • 선택한 텍스트에 스타일 변경

 
 
 
JAVA
toggleStyle(textPane, StyleConstants::isBold, StyleConstants::setBold);
3-1-2기울임 스타일

JTextPane에서는 StyleConstants.setItalic 메서드를 활용하여 선택한 텍스트나 새로 입력할 텍스트에 기울임 스타일을 적용할 수 있습니다. 기울임 스타일은 텍스트를 오른쪽으로 약간 기울여 강조하거나 인용문이나 특별한 의미를 가진 단어를 시각적으로 구분하는 데 사용되며 문서나 애플리케이션에서 가독성을 해치지 않고 특정 단어를 돋보이게 하는 효과적인 방법입니다.

  • 입력 전에 스타일 미리 설정

 
 
 
JAVA
StyleConstants.setItalic(attr, true);
  • 선택한 텍스트에 스타일 변경

 
 
 
JAVA
toggleStyle(textPane, StyleConstants::isItalic, StyleConstants::setItalic);
3-1-3밑줄 스타일

JTextPane에서는 StyleConstants.setUnderline 메서드를 사용하여 텍스트에 밑줄 스타일을 적용하며 이를 통해 선택한 텍스트나 새로 입력할 텍스트에 밑줄을 추가해 강조할 수 있습니다. 밑줄은 텍스트 아래에 선을 추가해 중요한 정보를 시각적으로 구분할 때 사용되며 주로 링크나 강조가 필요한 내용을 표시하는 데 활용됩니다.

  • 입력 전에 스타일 미리 설정

 
 
 
JAVA
StyleConstants.setUnderline(attr, true);
  • 선택한 텍스트에 스타일 변경

 
 
 
JAVA
toggleStyle(textPane, StyleConstants::isUnderline, StyleConstants::setUnderline);
3-1-4취소선 스타일

JTextPane에서는 StyleConstants.setStrikeThrough 메서드를 사용해 텍스트에 취소선 스타일을 적용할 수 있으며 이는 텍스트를 가로지르는 선을 추가해 더 이상 유효하지 않거나 삭제된 내용을 시각적으로 표현할 때 유용합니다. 주로 수정 사항이나 변경된 정보를 강조하거나 문서 내에서 내용을 구분할 때 사용됩니다.

  • 입력 전에 스타일 미리 설정

 
 
 
JAVA
StyleConstants.setStrikeThrough(attr, true);
  • 선택한 텍스트에 스타일 변경

 

 
 
 
JAVA
toggleStyle(textPane, StyleConstants::isStrikeThrough, StyleConstants::setStrikeThrough);
3-1-5윗첨자 스타일

JTextPane에서는 StyleConstants.setSuperscript 메서드를 사용해 텍스트에 윗첨자 스타일을 적용할 수 있으며 이를 통해 수학식의 제곱이나 지수 화학식의 원자번호 각주나 인용과 같은 내용을 일반 텍스트보다 위로 띄워 표현할 수 있습니다. 

 

예를 들어 "x²"처럼 텍스트 내에서 숫자나 문자를 위로 띄우는 데 유용하게 사용할 수 있습니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
StyleConstants.setSuperscript(attr, true);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
toggleStyle(textPane, StyleConstants::isSuperscript, StyleConstants::setSuperscript);
3-1-6아래첨자 스타일

JTextPane에서는 StyleConstants.setSubscript 메서드를 사용해 텍스트에 아래첨자 스타일을 적용할 수 있습니다. 이 기능은 주로 화학식의 분자 구조나 수학식의 하위 첨자처럼 텍스트를 기준선 아래에 위치시켜야 하는 경우에 유용합니다.

 

예를 들어 "H₂O"에서 숫자 "2"를 아래로 위치시켜야 할 때 이 스타일을 사용하면 화학식이 더 정확하고 읽기 쉬운 방식으로 표현됩니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
StyleConstants.setSubscript(attr, true);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
toggleStyle(textPane, StyleConstants::isSubscript, StyleConstants::setSubscript);
3-2 색상

JTextPane에서 색상텍스트의 글자 색상과 배경 색상을 설정할 수 있는 기능을 제공합니다. 색상은 SimpleAttributeSet 객체를 사용하여 설정할 수 있으며 텍스트의 스타일을 강조하거나 배경 색을 변경하여 가독성을 높일 수 있습니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
JTextPane textPane = new JTextPane();
frame.add(new JScrollPane(textPane));
			
SimpleAttributeSet attr = new SimpleAttributeSet();
// 색상 설정 ↓↓↓    
StyleConstants.yourStyleHere(attr, Color);
// 색상 설정 ↑↑↑   
textPane.setCharacterAttributes(attr, true);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
JTextPane textPane = new JTextPane();
frame.add(new JScrollPane(textPane));

JButton Button = new JButton("스타일 변경");
Button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // 색상 설정 ↓↓↓   
        toggleColorStyle(textPane, isAppliedFunc, applyFunc, Color, Color);
        // 색상 설정 ↑↑↑   
    }
});
            
frame.add(Button, BorderLayout.SOUTH);

-------------------------------------------------------------------------

/**
 * @param textPane         대상 JTextPane
 * @param isAppliedFunc  현재 스타일(색상)이 적용되어 있는지를 확인하는 함수
 * @param applyFunc       지정된 색상을 적용하는 함수
 * @param targetColor     토글할 대상 색상 (예: 강조 색상)
 * @param defaultColor   되돌릴 기본 색상 (예: 검정)
 */
static void toggleColorStyle(JTextPane textPane, 
                            BiFunction<AttributeSet, Color, Boolean> isAppliedFunc,
                            BiConsumer<MutableAttributeSet, Color> applyFunc, 
                            Color targetColor, Color defaultColor) {
		
    StyledDocument doc = textPane.getStyledDocument();
    int start = textPane.getSelectionStart();
    int end = textPane.getSelectionEnd();
    SimpleAttributeSet attr = new SimpleAttributeSet();

    if (start != end) {
        AttributeSet currentAttr = doc.getCharacterElement(start).getAttributes();
        boolean isApplied = isAppliedFunc.apply(currentAttr, targetColor);
        applyFunc.accept(attr, isApplied ? defaultColor : targetColor);
        doc.setCharacterAttributes(start, end - start, attr, false);
    } else {
        MutableAttributeSet inputAttr = textPane.getInputAttributes();
        boolean isApplied = isAppliedFunc.apply(inputAttr, targetColor);
        applyFunc.accept(attr, isApplied ? defaultColor : targetColor);
        textPane.setCharacterAttributes(attr, true);
    }
}
3-2-1텍스트 색상

글자 색상StyleConstants.setForeground() 메서드를 사용하여 설정할 수 있습니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
StyleConstants.setForeground(attr, Color.GREEN);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
toggleColorStyle(textPane, (attr, color) -> StyleConstants.getForeground(attr).equals(color), (attr, color) -> StyleConstants.setForeground(attr, color), Color.GREEN, olor.BLACK);
3-2-2배경 색상

배경 색상StyleConstants.setBackground() 메서드를 사용하여 설정할 수 있습니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
StyleConstants.setBackground(attr, Color.GREEN);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
toggleColorStyle(textPane, (attr, color) -> StyleConstants.getBackground(attr).equals(color), (attr, color) -> StyleConstants.setBackground(attr, color), Color.GREEN, Color.WHITE);
3-3 정렬

Java의 JTextPane 같은 텍스트 컴포넌트에서는 문단 단위로 텍스트 정렬을 설정할 수 있으며 StyleConstants 클래스를 사용해 정렬 방향지정합니다.

💡 Tip
StyleConstants.ALIGN_JUSTIFIED는 지정은 가능하지만 JTextPane에서는 실제로 제대로 적용되지 않는 경우가 많습니다.
  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
JTextPane textPane = new JTextPane();
frame.add(new JScrollPane(textPane));
			
SimpleAttributeSet attr = new SimpleAttributeSet();
// 정렬 설정 ↓↓↓
StyleConstants.setAlignment(attr, Alignment);
// 정렬 설정 ↑↑↑
textPane.setParagraphAttributes(attr, false);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
JTextPane textPane = new JTextPane();
frame.add(new JScrollPane(textPane));
            
JButton Button = new JButton("스타일 변경");
Button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // 정렬 설정 ↓↓↓
        setParagraphAlignment(textPane, Alignment);
        // 정렬 설정 ↑↑↑
    }
});
			
frame.add(Button, BorderLayout.SOUTH);
           
-----------------------------------------------------------------------------           

/**
 * @param textPane            대상 JTextPane
 * @param targetAlignment  적용할 정렬 상수 
 * (예: StyleConstants.ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_JUSTIFIED)
 */
private static void setParagraphAlignment(JTextPane textPane, int targetAlignment) {
    StyledDocument doc = textPane.getStyledDocument();
    int start = textPane.getSelectionStart();
    int end = textPane.getSelectionEnd();
    SimpleAttributeSet attr = new SimpleAttributeSet();

    StyleConstants.setAlignment(attr, targetAlignment);

    if (start != end) {
        Element startPara = doc.getParagraphElement(start);
        Element endPara = doc.getParagraphElement(end);
        int paraStart = startPara.getStartOffset();
        int paraEnd = endPara.getEndOffset();

        doc.setParagraphAttributes(paraStart, paraEnd - paraStart, attr, false);
    } else {
        textPane.setParagraphAttributes(attr, false);
    }
}
3-3-1왼쪽 정렬 (기본값)

JTextPane에서 왼쪽 정렬은 별도의 설정 없이 기본적으로 적용되는 가장 일반적인 텍스트 정렬 방식입니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
StyleConstants.setAlignment(alignAttr, StyleConstants.ALIGN_LEFT);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
setParagraphAlignment(textPane, StyleConstants.ALIGN_LEFT);
3-3-2가운데 정렬

JTextPane에서 가운데 정렬은 문단의 각 줄을 가로 중앙에 맞춰 배치하는 정렬 방식입니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
StyleConstants.setAlignment(alignAttr, StyleConstants.ALIGN_CENTER);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
setParagraphAlignment(textPane, StyleConstants.ALIGN_CENTER);
3-3-3오른쪽 정렬

JTextPane에서 오른쪽 정렬은 텍스트를 문단의 오른쪽 끝에 맞춰 배치하여 오른쪽 경계에 맞춰 정렬된 형태로 표시됩니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
StyleConstants.setAlignment(alignAttr, StyleConstants.ALIGN_RIGHT);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
setParagraphAlignment(textPane, StyleConstants.ALIGN_RIGHT);
3-3-4양쪽 정렬

JTextPane에서는 StyleConstants.ALIGN_JUSTIFIED사용양쪽 정렬을 지정할 수 있지만 실제로 글자를 화면에 표시하는 기능이 이를 제대로 처리하지 못해 정렬 효과가 잘 보이지 않거나 적용되지 않는 경우가 많습니다.

Swing이 글자를 표시할 때 사용되는 HTML이나 StyledDocument 기반의 방식은 양쪽 정렬에 필요한 ‘단어 사이 간격 조절’ 기능을 기본적으로 지원하지 않기 때문에 정렬 효과가 제대로 적용되지 않을 수 있습니다.

3-4 여백

텍스트의 여백은 문단이나 줄 주변에 공간을 주어 가독성을 높이고 문서의 구조를 정돈하는 데 사용됩니다. 왼쪽과 오른쪽 여백은 문단의 좌우 위치를 조절하며 첫 줄 들여쓰기문단의 시작을 구분하는 데 효과적입니다. 위쪽과 아래쪽 여백은 문단 사이의 간격을 조절해 시각적인 여유를 주고 내용 간의 구분을 명확히 해줍니다.

💡 Tip
JTextPane의 문단 스타일은 줄바꿈(Enter) 단위로 적용되며 자동 개행은 문단으로 간주되지 않아 스타일이 분리되지 않습니다.
  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
JTextPane textPane = new JTextPane();
frame.add(new JScrollPane(textPane));

SimpleAttributeSet paraAttr = new SimpleAttributeSet();
// 여백 및 간격 설정 ↓↓↓
StyleConstants.setLeftIndent(paraAttr, 20f);
// 여백 및 간격 설정 ↑↑↑
textPane.setParagraphAttributes(paraAttr, false);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
JTextPane textPane = new JTextPane();
frame.add(new JScrollPane(textPane));

JButton Button = new JButton("스타일 변경");
Button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // 여백 및 간격 설정 ↓↓↓
        setMargin(textPane, setter, value); 
        // 여백 및 간격 설정 ↑↑↑
    }
});

frame.add(Button, BorderLayout.SOUTH);
            
-------------------------------------------------------------------

/**
 * @param textPane 대상 JTextPane
 * @param setter   여백을 설정할 때 사용할 설정 함수
 * @param value    적용할 여백 값 
 */
private static void setMargin(JTextPane textPane, BiConsumer<SimpleAttributeSet, Float> setter, float value) {
    StyledDocument doc = textPane.getStyledDocument();
    int start = textPane.getSelectionStart();
    int end = textPane.getSelectionEnd();
    SimpleAttributeSet attr = new SimpleAttributeSet();

    setter.accept(attr, value);

    if (start != end) {
        Element startPara = doc.getParagraphElement(start);
        Element endPara = doc.getParagraphElement(end);
        int paraStart = startPara.getStartOffset();
        int paraEnd = endPara.getEndOffset();

        doc.setParagraphAttributes(paraStart, paraEnd - paraStart, attr, false);
    } else {
        textPane.setParagraphAttributes(attr, false);
    }
}
3-4-1왼쪽 여백

왼쪽 여백은 문단 전체를 기준으로 왼쪽 여백을 설정하여 첫 줄뿐만 아니라 모든 줄을 오른쪽으로 일정 거리만큼 밀어내는 방식으로 문단을 구분하거나 시각적으로 강조할 때 유용하게 사용됩니다.

JTextPane에서는 StyleConstants.setLeftIndent() 메서드를 사용하여 왼쪽 여백을 적용할 수 있습니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
StyleConstants.setLeftIndent(paraAttr, 20f);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
setMargin(textPane, StyleConstants::setLeftIndent, 20f);

 

3-4-2오른쪽 여백

실행 결과를 시각적으로 더 명확하게 보여주기 위해 텍스트를 오른쪽으로 정렬했습니다.

 

오른쪽 여백은 문단 전체를 기준으로 오른쪽 여백을 설정하여 모든 줄의 끝부분을 왼쪽으로 일정 거리만큼 들여쓰는 방식입니다. 이 설정은 문단의 너비를 조절하거나 텍스트의 오른쪽 끝을 시각적으로 정돈할 때 유용하게 사용됩니다.

JTextPane에서는 StyleConstants.setRightIndent() 메서드를 사용하여 오른쪽 여백을 적용할 수 있습니다.

💡 Tip
오른쪽 여백은 오른쪽 정렬을 하거나 자동 개행 기능이 활성화되어야 제대로 보입니다. 자동 개행 기능이 없으면 오른쪽 여백이 정상적으로 적용되지 않을 수 있습니다.
  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
StyleConstants.setRightIndent(paraAttr, 20f);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
setMargin(textPane, StyleConstants::setRightIndent, 20f);
3-4-3첫 줄 들여쓰기

첫 줄 들여쓰기는 문단의 첫 번째 줄만 일정 거리만큼 들여쓰는 방식입니다.

JTextPane에서는 StyleConstants.setFirstLineIndent() 메서드를 사용하여 첫 줄 들여쓰기를 적용할 수 있습니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
StyleConstants.setFirstLineIndent(paraAttr, 10f);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
setMargin(textPane, StyleConstants::setFirstLineIndent, 15f);
3-4-4위쪽 간격

위쪽 간격은 문단의 상단에 여백을 추가하는 방식으로 문단이 다른 텍스트나 요소들과 구분되도록 도와줍니다.

JTextPane에서는 StyleConstants.setSpaceAbove() 메서드를 사용하여 위쪽 간격을 조절할 수 있습니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
StyleConstants.setSpaceAbove(paraAttr, 10f);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
setMargin(textPane, StyleConstants::setSpaceAbove, 10f);
3-4-5아래쪽 간격

아래쪽 간격은 문단의 하단에 여백을 추가하여 문단과 그 아래에 위치한 텍스트나 요소들 간의 공간을 설정하는 방식으로 문단 간 구분이나 여유 공간을 확보하는 데 유용하게 사용됩니다.

JTextPane에서는 StyleConstants.setSpaceBelow() 메서드를 사용하여 아래쪽 간격을 조절할 수 있습니다.

  • 입력 전에 스타일 미리 설정
 
 
 
JAVA
StyleConstants.setSpaceBelow(paraAttr, 10f);
  • 선택한 텍스트에 스타일 변경
 
 
 
JAVA
setMargin(textPane, StyleConstants::setSpaceBelow, 10f);
3-5 아이콘 삽입

JTextPane은 Java Swing에서 텍스트와 이미지를 함께 표현할 수 있는 서식 지원 컴포넌트로 문서나 애플리케이션에 시각적인 요소를 추가할 수 있습니다. 정적인 이미지뿐만 아니라 동적인 움짤(GIF)도 삽입할 수 있으며 이를 위해 SimpleAttributeSetStyleConstants.setIcon() 메서드를 활용합니다. 다만 삽입하는 이미지나 움짤의 크기가 너무 크거나 작으면 화면에 적절히 표시되지 않을 수 있으므로 상황에 맞게 리사이즈하거나 적절한 크기를 선택하는 것이 좋습니다.

  • 입력 전에 이미 미리 설정

 
 
 
JAVA
JTextPane textPane = new JTextPane();
frame.add(new JScrollPane(textPane));

try {
    SimpleAttributeSet iconAttr = new SimpleAttributeSet();
    StyleConstants.setIcon(iconAttr, new ImageIcon("icon.png"));
    textPane.getDocument().insertString(textPane.getCaretPosition(), " ", iconAttr);
} catch (BadLocationException e) {
    e.printStackTrace();
}
  • 버튼 클릭 시 이미지 삽입

 
 
 
JAVA
JTextPane textPane = new JTextPane();
frame.add(new JScrollPane(textPane));
			
JButton button = new JButton("이미지 삽입");
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        try {
            SimpleAttributeSet iconAttr = new SimpleAttributeSet();
            StyleConstants.setIcon(iconAttr, new ImageIcon("icon.png"));

            textPane.getDocument().insertString(textPane.getCaretPosition(), " ", iconAttr);
        } catch (BadLocationException | IllegalArgumentException ex) {
            ex.printStackTrace();
        }
    }
});

frame.add(button, BorderLayout.SOUTH);
반응형
LIST

'JAVA' 카테고리의 다른 글

[JAVA] 주석의 모든 것  (6) 2025.05.18
[JAVA] BasicScrollBarUI를 활용한 JScrollBar 커스터마이징  (41) 2025.05.01
[JAVA] JScrollPane 커스텀마이징 1  (177) 2025.04.22