جافا JFrame: كيفية تحليل متكرر من خلال مكونات (أي في حالة استخدام JScrollPane)
-
21-08-2019 - |
سؤال
وأنا باستخدام 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()
.