Java的JFrame中:如何通过组件递归解析(即,如果使用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的,我有做的:
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()
的组件。
不隶属于 StackOverflow