如何获取jframe上的jbutton数量

时间:2013-09-11 14:40:31

标签: java swing

我有这个代码,我试图计算/获取jframe上出现的jbuttons数量

我在jframe上有7个jbuttons和2个jtext字段,但是输出为1

Component c=this;
Container container = (Container) c;
int x = container.getComponentCount();
System.out.println(x);

我可以获得一些指导

4 个答案:

答案 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。