我有这段代码,我试图通过它来计算/获取 jframe 上存在的 jbutton 的数量
我在 jframe 上有 7 个 jbutton 和 2 个 jtext 字段,但输出即将到来 1
Component c=this;
Container container = (Container) c;
int x = container.getComponentCount();
System.out.println(x);
我能得到一些指导吗
获取 JFrame 中的所有组件(提示:使用递归)。
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++;
}
尝试更改您的第一行:
Component c = (your JFrame object);
您可以使用 Darryl 的Swing Utils递归地在容器中搜索组件。
听起来您最好计算层次结构中的组件而不是单个组件,例如:
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 总是只包含 1 个子组件,即 JRootPane。添加到 JFrame 的任何内容都会添加到根窗格中。