Java JFrame:cómo analizar de forma recursiva a través de componets (es decir,si el uso de JScrollPane)

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

Pregunta

Estoy usando TableLayout para mi swing GUI.Inicialmente sólo algunas etiquetas básicas, botones y campos de texto donde se requiera que yo podría más adelante en el acceso:

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

Por desgracia me encontré con problemas después de usar JScrollPane para apoyar el desplazamiento de JTextArea y JTable, que hice con:

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

Después de las sugerencias, he sido capaz de acceder a través de getComponent("fooburg") el componente deseado (la versión anterior es la definitiva).Muchas gracias a Dan y Bruno!

¿Fue útil?

Solución

@bruno es correcto -. Es necesario agregar el panel de texto al panel de contenido del frame

Ligeramente OT: Si por lo general desea acceder a todos los componentes de una jerarquía, se necesita algo recursivo - su método actual sólo imprimirá nombres secundarios inmediatos:

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

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

(no probado, pero algo como esto.)

Otros consejos

Es necesario añadir que el niño panel de contenido del JFrame lugar:

frame.getContentPane().add(comp);

Si se agrega el nuevo componente a JFrame directamente, por encima de su código nunca se de a ella, ya que sólo está enumerando los componentes bajo frame.getContentPane().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top