Java JFrame: come analizzare in modo ricorsivo attraverso i componenti (vale a dire se si utilizza JScrollPane)

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

Domanda

TableLayout per la mia GUI swing. Inizialmente solo alcune etichette di base, i pulsanti e campi di testo per quanto necessario, che ho potuto in seguito l'accesso da:

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;
}

Purtroppo mi sono imbattuto in problemi dopo aver usato utilizzando JScrollPane per supportare lo scorrimento in JTextArea e JTable di, che ho fatto con:

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

Dopo suggerimenti, sono stato in grado di accedere attraverso getComponent("fooburg") il componente desiderato (la versione di cui sopra è quella finale). Molte grazie a Dan e Bruno!

È stato utile?

Soluzione

@bruno è giusto -. È necessario aggiungere il riquadro di testo al riquadro del contenuto del frame

Un po 'OT: Se in genere desidera accedere tutti i componenti in una gerarchia, avete bisogno di qualcosa ricorsiva - il metodo corrente stamperà solo i nomi del bambino immediati:

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

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

(non testato, ma qualcosa di simile.)

Altri suggerimenti

È necessario aggiungere il bambino a riquadro del contenuto del JFrame invece:

frame.getContentPane().add(comp);

Se si aggiunge il nuovo componente di JFrame direttamente, il tuo codice di cui sopra non arrivano mai di esso perché si sta enumerazione solo i componenti in frame.getContentPane().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top