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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top