Java JFrame:如何通过组件递归解析(即如果使用JScrollPane)
我正在使用我的swing GUI。最初,只有一些基本的标签、按钮和文本字段(如果需要),稍后我可以通过以下方式访问这些标签、按钮和文本字段:Java JFrame:如何通过组件递归解析(即如果使用JScrollPane),java,swing,jscrollpane,jtextarea,tablelayout,Java,Swing,Jscrollpane,Jtextarea,Tablelayout,我正在使用我的swing GUI。最初,只有一些基本的标签、按钮和文本字段(如果需要),稍后我可以通过以下方式访问这些标签、按钮和文本字段: public Component getComponent(String componentName) { return getComponent(componentName, this.frame.getContentPane()); } private Component getComponent(String componentName,
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”)
访问所需的组件(上面的版本是最终版本)。非常感谢丹和布鲁诺 您需要将子项添加到JFrame的内容窗格中:
frame.getContentPane().add(comp);
如果您直接将新组件添加到JFrame,上面的代码将永远无法访问它,因为您只是在枚举
frame.getContentPane()
@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());
}
(未测试,但类似于此。)谢谢Dan,我更新了函数并按照您的建议实现了它。它适用于textfields&co,但不适用于嵌入在JScrollPane中的组件:-(