Java JFrame: comment analyser récursive à travers des composants (à savoir si vous utilisez JScrollPane)

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

Question

J'utilise TableLayout pour mon interface graphique de swing. Dans un premier temps seulement quelques étiquettes de base, les boutons et les champs de texte si nécessaire que je pouvais plus tard sur l'accès par:

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

Malheureusement, je suis tombé sur des problèmes après l'utilisation de l'aide pour soutenir le défilement JScrollPane dans JTable et de JTextArea, que je l'ai fait avec:

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

Après des suggestions, j'ai pu accéder par le composant souhaité getComponent("fooburg") (la version est au-dessus d'une finale). Un grand merci à Dan et Bruno!

Était-ce utile?

La solution

@bruno est juste -. Vous devez ajouter le volet texte au volet contenu du cadre

Un peu OT: Si vous voulez généralement accéder à tous les composants dans une hiérarchie, vous avez besoin quelque chose récursive - votre méthode actuelle n'imprimer les noms des enfants immédiats:

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

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

(non testé, mais quelque chose comme ça.)

Autres conseils

Vous devez ajouter l'enfant au volet contenu du JFrame à la place:

frame.getContentPane().add(comp);

Si vous ajoutez votre nouveau composant JFrame directement, votre code ci-dessus ne get à ce parce que vous n'énumérez les composants sous frame.getContentPane().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top