"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como um DocumentFilter pode restringir efetivamente a entrada JTextField a números inteiros?

Como um DocumentFilter pode restringir efetivamente a entrada JTextField a números inteiros?

Publicado em 01/01/2025
Navegar:981

How Can a DocumentFilter Effectively Restrict JTextField Input to Integers?

Filtrando entrada JTextField para números inteiros: uma abordagem eficaz com DocumentFilter

Embora intuitivo, usar um ouvinte chave para validar a entrada numérica em um JTextField é inadequado. Em vez disso, uma abordagem mais abrangente é empregar um DocumentFilter.

DocumentFilter: uma solução robusta

Um DocumentFilter monitora alterações em um documento, fornecendo maior controle sobre a validação de entrada. Ele permite que você:

  • Intercepte a entrada antes que ela seja inserida no documento.
  • Execute lógica de validação personalizada e rejeite entradas inválidas.
  • Lidar com vários cenários de entrada, incluindo recortar, copiar e colar.

Implementação com DocumentFilter

Um exemplo de implementação de MyIntFilter usando 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
}

Vantagens do DocumentFilter

  • Validação abrangente: Garante que todas as entradas, independentemente do método de entrada, atendam aos critérios de validação.
  • Versátil: Suporta vários tipos de dados, formatos de números e necessidades futuras de validação.
  • Cleaner Código: Centraliza a lógica de validação, reduzindo a complexidade do código.

Conclusão

Ao utilizar um DocumentFilter, você pode efetivamente restringir a entrada do JTextField a números inteiros, garantindo que apenas dados válidos sejam inseridos . É uma abordagem robusta e confiável que aborda as limitações dos principais ouvintes.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3