"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > DocumentFilter는 어떻게 JTextField 입력을 정수로 효과적으로 제한할 수 있습니까?

DocumentFilter는 어떻게 JTextField 입력을 정수로 효과적으로 제한할 수 있습니까?

2025-01-01에 게시됨
검색:288

How Can a DocumentFilter Effectively Restrict JTextField Input to Integers?

JTextField 입력을 정수로 필터링: DocumentFilter를 사용한 효과적인 접근 방식

직관적이지만 키 리스너를 사용하여 JTextField의 숫자 입력을 검증하는 것은 부적절합니다. 대신, 보다 포괄적인 접근 방식은 DocumentFilter를 사용하는 것입니다.

DocumentFilter: 강력한 솔루션

DocumentFilter는 문서의 변경 사항을 모니터링하여 입력 유효성 검사를 더욱 효과적으로 제어할 수 있습니다. 이를 통해 다음 작업을 수행할 수 있습니다.

  • 입력이 문서에 삽입되기 전에 차단합니다.
  • 사용자 지정 유효성 검사 논리를 수행하고 잘못된 입력을 거부합니다.
  • 다양한 입력 시나리오를 처리하고, 잘라내기, 복사 및 붙여넣기를 포함합니다.

DocumentFilter를 사용한 구현

다음의 구현 예 DocumentFilter:

class MyIntFilter extends DocumentFilter {
    @Override
    public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) 
        throws BadLocationException {

        Document doc = fb.getDocument();
        StringBuilder sb = new StringBuilder();
        sb.append(doc.getText(0, doc.getLength()));
        sb.insert(offset, string);

        if (test(sb.toString())) {
            super.insertString(fb, offset, string, attr);
        } else {
            // warn the user and don't allow the insert
        }
    }

    private boolean test(String text) {
        try {
            Integer.parseInt(text);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    ... // Other overridden methods for replace and remove
}

DocumentFilter의 장점

  • 포괄적인 유효성 검사: 입력 방법에 관계없이 모든 입력이 유효성 검사 기준을 충족하는지 확인합니다.
  • 다목적: 다양한 데이터 유형, 숫자 형식 및 향후 검증 지원 필요합니다.
  • 클리너 코드: 유효성 검사 논리를 중앙 집중화하여 코드 복잡성을 줄입니다.

결론

DocumentFilter를 활용하면 효과적으로 제한할 수 있습니다. JTextField는 정수로 입력되어 유효한 데이터만 입력되도록 합니다. 이는 핵심 청취자의 한계를 해결하는 강력하고 안정적인 접근 방식입니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3