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

Java JTextField와 JFormattedTextField의 차이점 완벽 정리


Swing에서 JTextField는 일반 텍스트(plain text) 입력에 사용되는 반면, JFormattedTextFieldJTextField를 확장한 클래스로, 텍스트에 원하는 형식(format)을 지정할 수 있습니다. 대표적으로 전화번호, 이메일, 날짜 등의 형식을 적용할 때 활용됩니다.

JTextField란?

  • JTextField는 사용자가 한 줄(single line) 형태로 텍스트를 입력할 수 있게 해주는 Swing의 핵심 컴포넌트 중 하나입니다.
  • 텍스트 필드에 입력이 발생하면 ActionListener 인터페이스가 이벤트를 생성하고, 캐럿(커서) 위치가 변경될 때마다 CaretListener 인터페이스가 호출됩니다.
  • 또한 MouseListenerKeyListener 인터페이스도 함께 사용할 수 있어 마우스 클릭이나 키보드 입력에 대한 처리도 가능합니다.

JTextField 예제

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JTextFieldTest extends JFrame {
    JTextField jtf;
    public JTextFieldTest() {
        setTitle("JTextField Test");
        setLayout(new FlowLayout());
        jtf = new JTextField(15);
        add(jtf);
        jtf.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                System.out.println("Event generated: " + jtf.getText());
            }
        });
        setSize(375, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }
    public static void main(String args[]) {
        new JTextFieldTest();
    }
}

위 예제는 15자 크기의 텍스트 필드를 생성합니다. 필드에서 Enter 키를 누르면 ActionEvent가 발생하여 입력된 텍스트가 콘솔에 출력됩니다.

실행 결과

Java JTextField와 JFormattedTextField의 차이점 완벽 정리

JFormattedTextField란?

  • 형식화된 텍스트 필드(formatted text field)는 JFormattedTextField 클래스의 인스턴스로, JTextField의 직접적인 하위 클래스입니다.
  • JFormattedTextField는 일반 텍스트 필드와 비슷하지만, 사용자가 입력하는 문자의 유효성(validity)을 검증할 수 있으며, 입력 가능한 문자를 지정하는 포매터(formatter)와 연결할 수 있다는 점이 다릅니다.
  • Format 클래스를 기반으로 형식화된 텍스트 필드를 만들 수 있습니다. 먼저 포매터를 생성하고 필요에 따라 커스터마이징한 후, Format 타입의 인자를 받는 JFormattedTextField(Format format) 생성자를 호출하면 됩니다.

JFormattedTextField 예제

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class JFormattedTextFieldTest extends JFrame {
    JFormattedTextField jftf;
    MaskFormatter mf;
    public JFormattedTextFieldTest() {
        setTitle("JFormattedTextField Test");
        setLayout(new FlowLayout());
        // 전화번호 포매터 - (국가 코드)-(지역 코드)-(전화 번호)
        try {
            mf = new MaskFormatter("##-###-#######");
            mf.setPlaceholderCharacter('#');
            jftf = new JFormattedTextField(mf);
            jftf.setColumns(12);
        } catch(Exception e) {
            e.printStackTrace();
        }
        add(jftf);
        setSize(375, 250);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
    public static void main(String args[]) {
        new JFormattedTextFieldTest();
    }
}

위 예제에서는 MaskFormatter를 사용하여 국가 코드-지역 코드-번호 순서의 전화번호 형식을 지정했습니다. 사용자는 '#' 자리에 해당하는 패턴에 맞춰서만 입력할 수 있으므로 잘못된 형식의 데이터가 입력되는 것을 사전에 방지할 수 있습니다.

실행 결과

Java JTextField와 JFormattedTextField의 차이점 완벽 정리

핵심 차이점 요약

구분JTextFieldJFormattedTextField
입력 값자유로운 일반 텍스트지정된 형식의 텍스트
유효성 검증기본 제공되지 않음포매터를 통한 검증 지원
상속 관계JTextComponent의 하위 클래스JTextField의 직접적인 하위 클래스
주요 활용검색어, 이름, 메모 등전화번호, 날짜, 이메일 등

정리하면, 단순한 텍스트 입력에는 JTextField를, 입력 형식 지정과 유효성 검증이 필요한 경우에는 JFormattedTextField를 사용하는 것이 바람직합니다.