TreeWalker { public Iterable<Component> ancestors() { return new Iterable<Component>() { @Override public Iterator<Component> iterator() { return new AncestorIterator(myRoot); } }; } TreeWalker(@NotNull Component root); static boolean isAncestor(@NotNull Container ancestor, @NotNull Component child); Stream<Component> ancestorStream(); Iterable<Component> ancestors(); Stream<Component> descendantStream(DescendantOrder order); Iterable<Component> descendants(DescendantOrder order); Stream<Component> descendantStream(); Iterable<Component> descendants();  }
@Test public void canIterateAncestors() throws Exception { JPanel panel1 = new JPanel(); JPanel panel11 = new JPanel(); JPanel panel12 = new JPanel(); JPanel panel123 = new JPanel(); JPanel panel13 = new JPanel(); panel1.add(panel11); panel1.add(panel12); panel12.add(panel123); panel1.add(panel13); int count = 0; TreeWalker treeWalker = new TreeWalker(panel123); for (Component c : treeWalker.ancestors()) { count++; } assertThat(count).isEqualTo(3); }