سؤال

من أجل تهيئة كافة JTextfFieldق على أ JPanel عندما ينقر المستخدمون على "زر مسح"، أحتاج إلى التكرار عبر ملف JPanel (بدلاً من تعيين كل الحقول الفردية على "").

كيف يمكنني استخدام حلقة for-each للتكرار خلال ملف JPanel بحثا عن JTextFieldس؟

هل كانت مفيدة؟

المحلول

for (Component c : pane.getComponents()) {
    if (c instanceof JTextField) { 
       ((JTextField)c).setText("");
    }
}

ولكن إذا كان لديك JTextFields متداخلة بشكل أعمق، فيمكنك استخدام النموذج العودي التالي:

void clearTextFields(Container container) {
    for (Component c : container.getComponents()) {
        if (c instanceof JTextField) {
           ((JTextField)c).setText("");
        } else
        if (c instanceof Container) {
           clearTextFields((Container)c);
        }
    }
}

يحرر: عينة ل توم هاوتن - خط التدخل سيكون الاقتراح هو الحصول على قائمة في فئة الإطار الخاص بك:

List<JTextField> fieldsToClear = new LinkedList<JTextField>();

وعندما تقوم بتهيئة الحقول النصية الفردية، قم بإضافتها إلى هذه القائمة:

someField = new JTextField("Edit me");
{ fieldsToClear.add(someField); }

وعندما ينقر المستخدم على زر المسح، فقط:

for (JTextField tf : fieldsToClear) {
    tf.setText("");
}

نصائح أخرى

وبينما إجابة أخرى تظهر بشكل مباشر في حل مشكلتك، سؤالك ويشيران إلى حل الفقراء.

وترغب عموما تبعيات ثابتة بين الطبقات لتكون وسيلة واحدة. يجب عليك أن تذهب من خلال حزمة getCommponents. الصب (على افتراض الوراثة) هو وسيلة سهلة لمعرفة أن شيئا ما قد حصل من خطأ.

وهكذا عند إنشاء حقول النص لشكل، وإضافتها إلى قائمة إلى أن يتم مسح في عملية واضحة، فضلا عن إضافتها إلى لوحة. بالطبع في التعليمات البرمجية الحقيقي هناك أشياء ربما غيرها تريد أن تفعل لهم أيضا. في التعليمات البرمجية الحقيقي ربما كنت تريد أن يكون التعامل مع النماذج (ربما Document) بدلا من JComponents.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top