Java Jframe : Howto Parse Componets를 통해 재귀 적으로 구문 분석 (예 : JSCrollPane을 사용하는 경우)

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

문제

사용 중입니다 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 's, 내가 한 일은 다음과 같습니다.

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

제안 후에, 나는 접근 할 수있었습니다 getComponent("fooburg") 원하는 구성 요소 (위의 버전은 최종 구성 요소입니다). Dan과 Bruno에게 감사드립니다!

도움이 되었습니까?

해결책

@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