キー リスナーを使用して 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 入力を整数に変換し、有効なデータのみが入力されるようにします。これは、主要なリスナーの制限に対処する、堅牢で信頼性の高いアプローチです。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3