Java JFrame : howto parse recursively through componets (i.如果使用 JScrollPane)

标签 java swing jscrollpane jtextarea tablelayout

我正在使用TableLayout对于我的 Swing 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 是对的 - 您需要将文本 Pane 添加到框架的内容 Pane 中。

稍微有点OT:如果您通常想要访问层次结构中的每个组件,则需要递归 - 您当前的方法只会打印直接子名称:

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

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

(未经测试,但类似这样。)

关于Java JFrame : howto parse recursively through componets (i.如果使用 JScrollPane),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/368194/

相关文章:

java - 使用 JLabel 修复 JScrollPane

java - Google Web 工具包运行时错误 : Absent Code attribute in method that is not native or abstract

java - 将 JButton 添加到 JScrollPane

java - 将 eclipse e4 应用程序的窗口设置为具有整个屏幕大小

java - 使用助记符调用JButton按下动画

java - JProgressBar不会从SwingWorker更新,而调试工作正常

java - JScrollPane 打开到面板底部

jquery - 带边框的 CSS 边框框会导致不必要的滚动条

java - 在应用程序模块 Android 库模块中使用带有 JNI 的库模块

java - 使用 BigQuery REST 或 Java API 运行查询以获取 JSON 输出格式