我有这个代码,我试图计算/获取jframe上出现的jbuttons数量
我在jframe上有7个jbuttons和2个jtext字段,但是输出为1
Component c=this;
Container container = (Container) c;
int x = container.getComponentCount();
System.out.println(x);
我可以获得一些指导
答案 0 :(得分:2)
获取JFrame中的所有组件(提示:使用递归完成here)。
public static List<Component> getAllComponents(final Container c) {
Component[] comps = c.getComponents();
List<Component> compList = new ArrayList<Component>();
for (Component comp : comps) {
compList.add(comp);
if (comp instanceof Container) {
compList.addAll(getAllComponents((Container) comp));
}
}
return compList;
}
然后测试作为jbuttons的组件。
int count =0;
for(Component c : getAllComponents(container)){
if(c instanceof JButton) count++;
}
答案 1 :(得分:1)
尝试更改第一行:
Component c = (your JFrame object);
答案 2 :(得分:1)
您可以使用Darryl的Swing Utils递归搜索组件的容器。
答案 3 :(得分:0)
听起来你更好地计算层次结构中的组件而不是单个组件,例如:
public static int countSubComponentsOfType(Container container, Class<? extends Component> type){
int count = 0;
for(Component component : container.getComponents()){
if(type.isInstance(component)) count++;
if(component instanceof Container)
count += countSubComponentsOfType((Container)component, type);
}
return count;
}
或者,如果您真的想要JFrame上的组件,请改用以下内容。
frame.getRootPane().getComponentCount();
这是因为JFrame总是只包含一个子组件,一个JRootPane。添加到JFrame的任何内容都会添加到rootpane。