ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JTextField 에 숫자만 입력받기
    개발 2007. 6. 10. 00:28

    사용자로부터 입력을 받을 수 있도록 하는 컴포넌트들 중에서 특정한 값들이나, 특정한 포맷으로만 입력을 받고 싶을때가 있다.
    그러한 방법으로 특정포맷을 지원하는 컴포넌트를 사용하거나, 필터를 이용하거나, 특정 클래스를 상속받아 확장하여 사용법이 있다.
    여기에서는 텍스트필드값 중 숫자만 입력받을 수 있도록 하기 위해서 PlainDocument 클래스를 상속받아 이를 사용하여 숫자 입력만을 받겠다.

    /* IntegerDocument 클래스 */
    import javax.swing.text.*;
       public class IntegerDocument extends PlainDocument {

         int currentValue = 0;

         public IntegerDocument() {
         }

         public int getValue() {
           return currentValue;
         }

         public void insertString(int offset, String string,
             AttributeSet attributes) throws BadLocationException {

           if (string == null) {
             return;
           } else {
             String newValue;
             int length = getLength();
             if (length == 0) {
               newValue = string;
             } else {
               String currentContent = getText(0, length);
               StringBuffer currentBuffer =
                    new StringBuffer(currentContent);
               currentBuffer.insert(offset, string);
               newValue = currentBuffer.toString();
             }
             currentValue = checkInput(newValue, offset);
             super.insertString(offset, string, attributes);
           }
         }
         public void remove(int offset, int length)
             throws BadLocationException {
           int currentLength = getLength();
           String currentContent = getText(0, currentLength);
           String before = currentContent.substring(0, offset);
           String after = currentContent.substring(length+offset,
             currentLength);
           String newValue = before + after;
           currentValue = checkInput(newValue, offset);
           super.remove(offset, length);
         }
         public int checkInput(String proposedValue, int offset)
             throws BadLocationException {
           if (proposedValue.length() > 0) {
             try {
               int newValue = Integer.parseInt(proposedValue);
               return newValue;
             } catch (NumberFormatException e) {
               throw new BadLocationException(proposedValue, offset);
             }
           } else {
             return 0;
           }
         }
       }


    위의 클래스는 컴포넌트가 입력을 받을 때 숫자이면 입력을 허락하고 숫자가 아니면 삭제를 하여 숫자만 입력받을 수 있도록 한다.

    위의 클래스는 다음과 같이 사용할 수 있다.

    JTextField tf = new JTextField();
    IntegerDocument  id = new IntegerDocument ();
    tf.setDocument(id);

    참고로 텍스트필드의 커서의 위치를 계산기처럼 오른쪽으로 위치하고 싶다면, 다음과 같이 할 수 있다.

    tf.setHorizontalAlignment(JTextField.RIGHT);

    반응형

    '개발' 카테고리의 다른 글

    vi 에디터의 북마크(책갈피) 달기  (0) 2007.06.20
    우분투에 APM 설치하기  (0) 2007.06.18
    php 에서의 2차배열 정렬  (0) 2007.06.02
    JDIC 프로젝트  (0) 2007.05.17
    자바 소트  (0) 2007.05.17

    댓글

Designed by Tistory.