جافا JFrame: كيفية تحليل متكرر من خلال مكونات (أي في حالة استخدام JScrollPane)

StackOverflow https://stackoverflow.com/questions/368194

سؤال

وأنا باستخدام TableLayout للحصول على بلدي واجهة المستخدم الرسومية سوينغ. في البداية فقط بعض العلامات الأساسية، وأزرار وحقول النص حيث المطلوبة التي يمكن أن أقوله في وقت لاحق وصول:

public Component getComponent(String componentName) {
    return getComponent(componentName, this.frame.getContentPane());
}

private Component getComponent(String componentName, Component component) {
    Component found = null;

    if (component.getName() != null && component.getName().equals(componentName)) {
        found = component;
    } else {
        for (Component child : ((Container) component).getComponents()) {
            found = getComponent(componentName, child);

            if (found != null)
                break;
        }
    }
    return found;
}

للأسف واجهت مشاكل بعد استخدام باستخدام JScrollPane لدعم التمرير في JTextArea وفي JTable، وهو ما قمت به مع:

JTextArea ta = new JTextArea();
ta.setName("fooburg");
JScrollPane scr = new JScrollPane(ta);
frame.getContentPane().add(scr, "1, 1");  // EDIT: changed, tkx bruno

وبعد اقتراحات، لقد كنت قادرا على الوصول إليها من خلال getComponent("fooburg") المكون المطلوب (النسخة أعلاه هو نهائي واحد). شكرا جزيلا لدان وبرونو!

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

المحلول

وbruno هو حق - تحتاج إلى إضافة جزء النص إلى جزء المحتويات إطار ل

وOT قليلا: إذا كنت تريد عموما للوصول إلى كل عنصر في التسلسل الهرمي، كنت بحاجة الى شيء عودي - والطريقة الحالية الخاصة بك طباعة فقط أسماء الأطفال الفورية:

void printNames(Component component) {
    System.out.println(component.getName());
    for (Component child : component.getComponents()) {
        printNames(child);
    }
}

void printFrameNamesComponents(JFrame frame) {
    printNames(frame.getContentPane());
}

و(لم تختبر، ولكن شيئا من هذا القبيل.)

نصائح أخرى

وتحتاج إلى إضافة الطفل إلى جزء المحتويات وJFrame وبدلا من ذلك:

frame.getContentPane().add(comp);

إذا قمت بإضافة عنصر جديد إلى JFrame مباشرة، التعليمات البرمجية أعلاه لم يحصل على ذلك لأنك فقط تعداد مكونات تحت frame.getContentPane().

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