diff --git a/src/share/classes/javax/swing/JDesktopPane.java b/src/share/classes/javax/swing/JDesktopPane.java
index 579d65af3d0334e1f995e4f94a8ed5d1e75d3547..85615d3d9592c7af504e1832dde298b9e5aa36c6 100644
--- a/src/share/classes/javax/swing/JDesktopPane.java
+++ b/src/share/classes/javax/swing/JDesktopPane.java
@@ -27,7 +27,8 @@ package javax.swing;
import java.util.List;
import java.util.ArrayList;
-import java.util.Vector;
+import java.util.Collection;
+import java.util.Iterator;
import javax.swing.plaf.*;
import javax.accessibility.*;
@@ -42,7 +43,6 @@ import java.io.IOException;
import java.beans.PropertyVetoException;
import java.util.Set;
import java.util.TreeSet;
-
/**
* A container used to create a multiple-document interface or a virtual desktop.
* You create JInternalFrame
objects and add them to the
@@ -261,25 +261,26 @@ public class JDesktopPane extends JLayeredPane implements Accessible
* @return an array of JInternalFrame
objects
*/
public JInternalFrame[] getAllFrames() {
+ return getAllFrames(this).toArray(new JInternalFrame[0]);
+ }
+
+ private static Collection getAllFrames(Container parent) {
int i, count;
- JInternalFrame[] results;
- Vector vResults = new Vector(10);
-
- count = getComponentCount();
- for(i = 0; i < count; i++) {
- Component next = getComponent(i);
- if(next instanceof JInternalFrame)
- vResults.addElement((JInternalFrame) next);
- else if(next instanceof JInternalFrame.JDesktopIcon) {
- JInternalFrame tmp = ((JInternalFrame.JDesktopIcon)next).getInternalFrame();
- if(tmp != null)
- vResults.addElement(tmp);
+ Collection results = new ArrayList();
+ count = parent.getComponentCount();
+ for (i = 0; i < count; i++) {
+ Component next = parent.getComponent(i);
+ if (next instanceof JInternalFrame) {
+ results.add((JInternalFrame) next);
+ } else if (next instanceof JInternalFrame.JDesktopIcon) {
+ JInternalFrame tmp = ((JInternalFrame.JDesktopIcon) next).getInternalFrame();
+ if (tmp != null) {
+ results.add(tmp);
+ }
+ } else if (next instanceof Container) {
+ results.addAll(getAllFrames((Container) next));
}
}
-
- results = new JInternalFrame[vResults.size()];
- vResults.copyInto(results);
-
return results;
}
@@ -322,27 +323,14 @@ public class JDesktopPane extends JLayeredPane implements Accessible
* @see JLayeredPane
*/
public JInternalFrame[] getAllFramesInLayer(int layer) {
- int i, count;
- JInternalFrame[] results;
- Vector vResults = new Vector(10);
-
- count = getComponentCount();
- for(i = 0; i < count; i++) {
- Component next = getComponent(i);
- if(next instanceof JInternalFrame) {
- if(((JInternalFrame)next).getLayer() == layer)
- vResults.addElement((JInternalFrame) next);
- } else if(next instanceof JInternalFrame.JDesktopIcon) {
- JInternalFrame tmp = ((JInternalFrame.JDesktopIcon)next).getInternalFrame();
- if(tmp != null && tmp.getLayer() == layer)
- vResults.addElement(tmp);
+ Collection allFrames = getAllFrames(this);
+ Iterator iterator = allFrames.iterator();
+ while (iterator.hasNext()) {
+ if (iterator.next().getLayer() != layer) {
+ iterator.remove();
}
}
-
- results = new JInternalFrame[vResults.size()];
- vResults.copyInto(results);
-
- return results;
+ return allFrames.toArray(new JInternalFrame[0]);
}
private List getFrames() {