我使用 TableLayout 了解我的挥杆GUI。最初只有一些基本的标签,按钮并在需要的文本字段,我可以稍后由接入:

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

不幸的是我遇到了问题,使用JScrollPane支持JTextArea滚动使用后的JTable的,我有做的:

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

在建议,我已经能够通过getComponent("fooburg")访问所需的组件(上面的版本是最后一个)。非常感谢丹和布鲁诺!

有帮助吗?

解决方案

@bruno是正确的 - 你需要在文本窗格中添加到框架的内容窗格。

略OT:如果您一般要在层次结构来访问每个组件,你需要的东西递归 - 当前的方法将只打印直接孩子的名字:

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

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

(未测试,但这样的事情。)

其他提示

您需要给孩子添加到JFrame的内容窗格来代替:

frame.getContentPane().add(comp);

如果您添加新的组件JFrame的直接,你的代码上面从来没有的它,因为你只列举下frame.getContentPane()的组件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top