在这里同意Tom ...你的问题是你已经传递了List
将JLabel
s 添加到你的递归方法而你也将它返回 - 因此不止一次将相同的项添加到你的列表中.在政治上更正确的术语 - List
是你的累积者.
你的方法应该是这样的:
public void harvestJLabels(Container c, Listl) { Component[] components = c.getComponents(); for(Component com : components) { if(com instanceof JLabel) { l.add((JLabel) com); } else if(com instanceof Container) { harvestJLabels((Container) com, l)); } } }
然后你可以有一个辅助方法来启动这个收获:
public ListharvestJLabels(Container c) { List jLabels = new ArrayList (); harvestJLabels(c, jLabels); return jLabels; }