JTextArea는 여러 줄의 텍스트를 표시하거나 사용자가 직접 텍스트를 입력할 수 있도록 지원하는 멀티라인 텍스트 컴포넌트입니다. Java에서 JTextArea 클래스는 JTextComponent 클래스를 상속하며, 컴포넌트의 동작을 세부적으로 제어해야 할 때는 CaretListener 인터페이스를 함께 활용할 수 있습니다.
JTextArea에서 줄 바꿈을 적용하려면 setLineWrap(true) 메서드를 호출하면 됩니다. 다만 기본 설정에서는 텍스트가 문자 단위로 잘리기 때문에 단어가 중간에 끊어져 보일 수 있습니다. 이 경우 setWrapStyleWord(true) 메서드를 함께 사용하면 단어가 끊기지 않고 단어 단위로 자연스럽게 줄 바꿈됩니다.
아래 예제에서는 ItemListener 인터페이스를 사용하여 사용자가 word wrap(단어 줄 바꿈)과 line wrap(줄 바꿈) 체크박스를 선택함으로써 JTextArea의 줄 바꿈 동작을 실시간으로 전환하는 방법을 보여줍니다.
주요 메서드 정리
setLineWrap(boolean): 줄 바꿈 기능의 활성화 여부를 설정합니다.setWrapStyleWord(boolean): true로 설정하면 문자가 아닌 공백(단어 경계)을 기준으로 줄이 바뀝니다.getLineWrap(),getWrapStyleWord(): 현재 설정된 값을 반환하여 체크박스 초기 상태와 동기화할 때 유용합니다.
예제 코드
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JTextAreaTest {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("JTextArea Test");
frame.setSize(350, 275);
final JTextArea textArea = new JTextArea(15, 65);
frame.add(new JScrollPane(textArea));
final JCheckBox wordWrap = new JCheckBox("word wrap");
wordWrap.setSelected(textArea.getWrapStyleWord());
wordWrap.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent ie) {
textArea.setWrapStyleWord(wordWrap.isSelected());
}
});
frame.add(wordWrap, BorderLayout.NORTH);
final JCheckBox lineWrap = new JCheckBox("line wrap");
lineWrap.setSelected(textArea.getLineWrap());
lineWrap.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent ie) {
textArea.setLineWrap(lineWrap.isSelected());
}
});
frame.add(lineWrap, BorderLayout.SOUTH);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
실행 결과
프로그램을 실행하면 중앙에 스크롤이 포함된 JTextArea가 나타나고, 화면 상단에는 word wrap 체크박스, 하단에는 line wrap 체크박스가 배치됩니다. 각 체크박스를 선택하거나 해제하면 입력한 텍스트의 줄 바꿈 방식이 즉시 변경되는 것을 확인할 수 있습니다.