رغم أنه بديهي، إلا أن استخدام مستمع رئيسي للتحقق من صحة الإدخال الرقمي في JTextField غير كافٍ. بدلاً من ذلك، فإن النهج الأكثر شمولاً هو استخدام DocumentFilter.
]&&&]DocumentFilter: حل قوييراقب DocumentFilter التغييرات التي تطرأ على المستند، مما يوفر تحكمًا أكبر في التحقق من صحة الإدخال. يسمح لك بما يلي:
class MyIntFilter يمتد DocumentFilter { @تجاوز سلسلة إدراج باطلة عامة (FilterBypass fb، int offset، String string، AttributeSet attr) يرمي BadLocationException { المستند doc = fb.getDocument(); StringBuilder sb = new StringBuilder(); sb.append(doc.getText(0, doc.getLength())); sb.insert(offset, string); إذا (اختبار (sb.toString ()) { super.insertString(fb, offset, string, attr); } آخر { // تحذير المستخدم وعدم السماح بالإدراج } } اختبار منطقي خاص (نص السلسلة) { يحاول { Integer.parseInt(text); عودة صحيحة؛ } التقاط (NumberFormatException e) { عودة كاذبة. } } ... // طرق أخرى تم تجاوزها للاستبدال والإزالة
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
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3