"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكن لـ DocumentFilter تقييد إدخال JTextField بشكل فعال على الأعداد الصحيحة؟

كيف يمكن لـ DocumentFilter تقييد إدخال JTextField بشكل فعال على الأعداد الصحيحة؟

تم النشر بتاريخ 2025-01-01
تصفح:969

How Can a DocumentFilter Effectively Restrict JTextField Input to Integers?

تصفية إدخال JTextField إلى الأعداد الصحيحة: نهج فعال مع DocumentFilter

رغم أنه بديهي، إلا أن استخدام مستمع رئيسي للتحقق من صحة الإدخال الرقمي في JTextField غير كافٍ. بدلاً من ذلك، فإن النهج الأكثر شمولاً هو استخدام DocumentFilter.

]&&&]DocumentFilter: حل قوي

يراقب DocumentFilter التغييرات التي تطرأ على المستند، مما يوفر تحكمًا أكبر في التحقق من صحة الإدخال. يسمح لك بما يلي:

    اعتراض الإدخال قبل إدراجه في المستند.
  • تنفيذ منطق التحقق المخصص ورفض الإدخال غير الصالح.
  • التعامل مع سيناريوهات الإدخال المختلفة، بما في ذلك القص والنسخ واللصق.
التنفيذ باستخدام DocumentFilter

مثال على تنفيذ MyIntFilter باستخدام 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

  • التحقق الشامل : يضمن أن جميع المدخلات، بغض النظر عن طريقة الإدخال، تلبي معايير التحقق.
  • متعدد الاستخدامات: يدعم أنواع البيانات المختلفة وتنسيقات الأرقام والتحقق من الصحة في المستقبل الاحتياجات.
  • رمز المنظف : مركزية منطق التحقق من الصحة، وتقليل تعقيد التعليمات البرمجية.
الاستنتاج

من خلال استخدام DocumentFilter، يمكنك تقييد بشكل فعال إدخال JTextField إلى الأعداد الصحيحة، مما يضمن إدخال البيانات الصالحة فقط. إنه نهج قوي وموثوق يعالج القيود المفروضة على المستمعين الرئيسيين.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3