我正在使用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/