Java JFrame: Wie rekursiv durch Komponenten analysieren (das heißt bei Verwendung von JScrollPane)
-
21-08-2019 - |
Frage
Ich bin mit Tablelayout für meinen Swing GUI. Zunächst werden nur einige grundlegende Etiketten, Schaltflächen und Textfelder, wo erforderlich, die ich konnte später über den Zugang von:
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;
}
Leider lief ich in Fragen nach JScrollPane
mit Verwendung in JTextArea
und JTable die Unterstützung Scrollen, was ich auch tat mit:
JTextArea ta = new JTextArea();
ta.setName("fooburg");
JScrollPane scr = new JScrollPane(ta);
frame.getContentPane().add(scr, "1, 1"); // EDIT: changed, tkx bruno
Nach Vorschlägen, ich habe in der Lage, die gewünschte Komponente für den Zugriff durch getComponent("fooburg")
(die Version oben ist die letzte). Vielen Dank an Dan und Bruno!
Lösung
@bruno ist richtig -. Sie müssen den Textbereich auf den Rahmen des Inhaltsbereich hinzuzufügen
Ein wenig OT: Wenn Sie in der Regel alle Komponenten in einer Hierarchie zugreifen möchten, müssen Sie etwas rekursive - Ihre aktuelle Methode wird nur unmittelbar untergeordneten Namen drucken:
void printNames(Component component) {
System.out.println(component.getName());
for (Component child : component.getComponents()) {
printNames(child);
}
}
void printFrameNamesComponents(JFrame frame) {
printNames(frame.getContentPane());
}
(nicht getestet, aber so etwas wie diese.)
Andere Tipps
Sie müssen das Kind auf die JFrame des Inhaltsfenster hinzufügen:
frame.getContentPane().add(comp);
Wenn Sie Ihre neue Komponente JFrame direkt hinzufügen, über den Code nie sie um es zu bekommen, weil Sie nur die Komponenten unter frame.getContentPane()
aufzählt.