Java Jframe : Howto Parse Componets를 통해 재귀 적으로 구문 분석 (예 : JSCrollPane을 사용하는 경우)
-
21-08-2019 - |
문제
사용 중입니다 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()
.
제휴하지 않습니다 StackOverflow