直感的ではありますが、キー リスナーを使用して JTextField の数値入力を検証するのは不十分です。代わりに、より包括的なアプローチは DocumentFilter を使用することです。
DocumentFilter はドキュメントへの変更を監視し、入力検証をより詳細に制御できます。これにより、次のことが可能になります。
DocumentFilter を使用した MyIntFilter の実装例:
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 を利用すると、JTextField 入力を整数に効果的に制限し、有効なデータのみが入力されるようにすることができます。これは、主要なリスナーの制限に対処する、堅牢で信頼性の高いアプローチです。
以上がDocumentFilter はどのようにして JTextField 入力を整数に効果的に制限できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。