DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curTop, File dir)
	{
		String curPath = dir.getPath();
		DefaultMutableTreeNode curDir = new DefaultMutableTreeNode(curPath);

		if (curTop != null)
		{ // should only be null at root
			curTop.add(curDir);
		}

		Vector ol = new Vector();
		String[] tmp = dir.list();
		for (int i = 0; i < tmp.length; i++)
		{
			ol.addElement(tmp[i]);
		}
		Collections.sort(ol, String.CASE_INSENSITIVE_ORDER);
		File f;
		Vector files = new Vector();

		// Make two passes, one for Dirs and one for Files. This is #1.
		for (int i = 0; i < ol.size(); i++)
		{
			String thisObject = (String) ol.elementAt(i);
			String newPath;
			if (curPath.equals(".")) newPath = thisObject;
			else newPath = curPath + File.separator + thisObject;
			if ((f = new File(newPath)).isDirectory()) addNodes(curDir, f);
			else files.addElement(thisObject);
		}

		// Pass two: for files.
		for (int fnum = 0; fnum < files.size(); fnum++)
		{
			curDir.add(new DefaultMutableTreeNode(files.elementAt(fnum)));
		}
		return curDir;
	}