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.
Um DocumentFilter monitora alterações em um documento, fornecendo maior controle sobre a validação de entrada. Ele permite que você:
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 }
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.
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