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

Java에서 JTextField에 숫자만 입력되도록 제한하는 방법

JTextField 입력 값 검증이 필요한 이유

기본적으로 JTextField는 숫자뿐 아니라 일반 문자와 특수 문자까지 모두 입력할 수 있습니다. 따라서 사용자가 입력한 문자열을 int와 같은 숫자 타입으로 변환해야 하는 경우에는, 잘못된 입력을 사전에 차단하는 유효성 검사가 반드시 필요합니다.

아래 예제는 KeyListener를 사용하여 JTextField에 숫자(0~9)만 입력할 수 있도록 제한하는 방법을 보여줍니다. 숫자 키가 아닌 키를 누르면 편집이 잠기고 빨간색 경고 메시지가 화면에 표시됩니다.

예제 코드

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JTextFieldValidation extends JFrame {
   JTextField tf;
   Container container;
   JLabel label;

   public JTextFieldValidation() {
      container = getContentPane();
      setBounds(0, 0, 500, 300);
      tf = new JTextField(25);
      setLayout(new FlowLayout());
      container.add(new JLabel("숫자를 입력하세요"));
      container.add(tf);
      container.add(label = new JLabel());
      label.setForeground(Color.red);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      setLocationRelativeTo(null);
      tf.addKeyListener(new KeyAdapter() {
         public void keyPressed(KeyEvent ke) {
            String value = tf.getText();
            int l = value.length();
            if (ke.getKeyChar() >= '0' && ke.getKeyChar() <= '9') {
               tf.setEditable(true);
               label.setText("");
            } else {
               tf.setEditable(false);
               label.setText("* 숫자(0-9)만 입력하세요");
            }
         }
      });
      setVisible(true);
   }

   public static void main(String[] args) {
      new JTextFieldValidation();
   }
}

코드 설명

  • KeyAdapter: KeyListener 인터페이스를 간편하게 구현하기 위한 어댑터 클래스로, 필요한 메서드만 오버라이드하면 됩니다.
  • keyPressed(): 키가 눌릴 때마다 호출되며, 입력된 문자가 '0'부터 '9' 사이인지 확인합니다.
  • setEditable(): 숫자 키일 경우 true로 설정해 입력을 허용하고, 그렇지 않으면 false로 설정해 입력을 차단합니다.
  • JLabel: 잘못된 입력이 감지되면 빨간색 경고 메시지를 사용자에게 보여줍니다.

실행 결과

프로그램을 실행하면 "숫자를 입력하세요"라는 안내 문구와 함께 텍스트 필드가 나타납니다. 숫자를 입력하면 정상적으로 처리되지만, 문자나 특수 문자 키를 누르면 입력이 차단되며 "* 숫자(0-9)만 입력하세요"라는 경고 메시지가 표시됩니다.

Java에서 JTextField에 숫자만 입력되도록 제한하는 방법

참고: 더 안정적인 대안

KeyListener 방식은 구현이 간단하지만, 키 이벤트 처리 시점에 따라 마지막 한 글자가 그대로 남거나 붙여넣기 입력은 막지 못하는 한계가 있습니다. 실무 환경에서는 javax.swing.text.DocumentFilterJFormattedTextField를 사용하는 것이 더 안정적인 입력 검증 방법으로 권장됩니다.