Index: DefaultJScriptingBrowser.java
===================================================================
--- DefaultJScriptingBrowser.java	(revision 467)
+++ DefaultJScriptingBrowser.java	(revision 468)
@@ -8,20 +8,25 @@
 import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
-import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import javax.swing.Icon;
+import javax.swing.ImageIcon;
 import javax.swing.JComponent;
 import javax.swing.JLabel;
 import javax.swing.JScrollPane;
 import javax.swing.JTree;
 import javax.swing.UIManager;
+import javax.swing.event.TreeModelEvent;
+import javax.swing.event.TreeModelListener;
 import javax.swing.event.TreeSelectionEvent;
 import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
 import javax.swing.tree.TreeCellRenderer;
+import javax.swing.tree.TreeModel;
 import javax.swing.tree.TreePath;
 import javax.swing.tree.TreeSelectionModel;
 
@@ -36,386 +41,358 @@
 
 public class DefaultJScriptingBrowser extends JScriptingBrowser {
 
-	private static final Logger logger = LoggerFactory.getLogger(DefaultJScriptingBrowser.class);
-	
-	public static final int DEFAULT_ACTION = 1;
-	public static final int SELECTION_ACTION = 2;
-	public static final int DROPDOWN_ACTION = 3;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
+    private static final Logger logger = LoggerFactory.getLogger(DefaultJScriptingBrowser.class);
 
-	protected ScriptingUIManager uimanager;
-	protected ScriptingManager manager;
-	protected DefaultMutableTreeNode rootNode;
-	protected DefaultTreeModel treeModel;
-	protected JTree tree;
-	protected ScriptingFolder root;
-	protected ActionListener defaultActionlistener = null;
-	protected ActionListener selectionActionlistener = null;
-	protected ActionListener dropDownActionlistener = null;
-	private final boolean foldersOnly;
+    protected ScriptingUIManager uimanager;
+    protected ScriptingManager manager;
+    protected TreeModel treeModel;
+    protected JTree tree;
+    protected ScriptingFolder root;
+    protected ActionListener defaultActionlistener = null;
+    protected ActionListener selectionActionlistener = null;
+    protected ActionListener dropDownActionlistener = null;
+    private final boolean foldersOnly;
 
-	public static class BrowserActionEvent extends ActionEvent {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = -1474410768278633364L;
-		private ScriptingBaseScript script = null;
+    public static class BrowserActionEvent extends ActionEvent {
 
-		public BrowserActionEvent(Object source, int id, String command,
-				ScriptingBaseScript script) {
-			super(source, id, command);
-			this.script = script;
-		}
+        /**
+         *
+         */
+        private static final long serialVersionUID = -1474410768278633364L;
+        private ScriptingBaseScript script = null;
 
-		public ScriptingBaseScript getScript() {
-			return this.script;
-		}
-	}
+        public BrowserActionEvent(Object source, int id, String command,
+                ScriptingBaseScript script) {
+            super(source, id, command);
+            this.script = script;
+        }
 
-	public DefaultJScriptingBrowser(ScriptingUIManager uimanager,
-			ScriptingFolder root) {
-		this(uimanager, root, false);
-	}
+        public ScriptingBaseScript getScript() {
+            return this.script;
+        }
+    }
 
-	public DefaultJScriptingBrowser(ScriptingUIManager uimanager,
-			ScriptingFolder root, boolean foldersOnly) {
-		super(new GridLayout(1, 2));
-		this.foldersOnly = foldersOnly;
-		this.uimanager = uimanager;
-		this.manager = uimanager.getManager();
-		this.root = root;
-		this.makeUI();
-	}
+    class ScriptingFolderTreeModel implements TreeModel {
 
-	@Override
-	public ScriptingManager getManager() {
-		return this.manager;
-	}
+        protected final ScriptingFolder root;
 
-	@Override
-	public ScriptingFolder getRoot() {
-		return this.root;
-	}
+        protected final List<TreeModelListener> listeners = new ArrayList();
 
-	public void addDefaultActionListener(ActionListener actionlistener) {
-		this.defaultActionlistener = actionlistener;
-	}
+        public ScriptingFolderTreeModel(ScriptingFolder root) {
+            this.root = root;
+        }
 
-	public void addSelectionActionListener(ActionListener actionlistener) {
-		this.selectionActionlistener = actionlistener;
-	}
+        @Override
+        public Object getRoot() {
+            return root;
+        }
 
-	public void addDropDownActionListener(ActionListener actionlistener) {
-		this.dropDownActionlistener = actionlistener;
-	}
+        @Override
+        public Object getChild(Object parent, int index) {
+            ScriptingFolder folder = (ScriptingFolder) parent;
+            List<ScriptingUnit> children = folder.getUnits();
+            return children.get(index);
+        }
 
-	private void makeUI() {
-		// Creamos el nodo raíz
-		String[] iconNames = root.getIconNames();
-		rootNode = new DefaultMutableTreeNode(new IconData(
-				this.uimanager.getIcon(iconNames[0]),
-				this.uimanager.getIcon(iconNames[1]), root));
+        @Override
+        public int getChildCount(Object parent) {
+            if (!(parent instanceof ScriptingFolder)) {
+                return 0;
+            }
+            ScriptingFolder folder = (ScriptingFolder) parent;
+            return folder.getUnits().size();
+        }
 
-		// Lo asignamos al modelo del árbol e iniciamos el árbol con ese
-		// modelo
-		treeModel = new DefaultTreeModel(rootNode);
-		tree = new JTree(treeModel);
+        @Override
+        public boolean isLeaf(Object node) {
+            return !(node instanceof ScriptingFolder);
+        }
 
-		// Cargamos la información inicial del árbol
-		this.initializeTree();
+        @Override
+        public int getIndexOfChild(Object parent, Object child) {
+            String childPath = ((ScriptingUnit) child).getFile().getAbsolutePath();
+            ScriptingFolder folder = (ScriptingFolder) parent;
+            List<ScriptingUnit> children = folder.getUnits();
+            for (int i = 0; i < children.size(); i++) {
+                ScriptingUnit aChild = children.get(i);
+                if (aChild.getFile().getAbsolutePath().equals(childPath)) {
+                    return i;
+                }
+            }
+            return -1;
+        }
 
-		// Para asignar iconos especiales según el tipo de objeto
-		TreeCellRenderer renderer = new IconCellRenderer();
-		tree.setCellRenderer(renderer);
+        @Override
+        public void valueForPathChanged(TreePath path, Object value) {
+        }
 
-		// Para marcar que no son editables sus propiedades o nodos
-		tree.setEditable(false);
+        @Override
+        public void addTreeModelListener(TreeModelListener listener) {
+            listeners.add(listener);
+        }
 
-		// Determina que sólo se puede seleccionar una linea
-		tree.getSelectionModel().setSelectionMode(
-				TreeSelectionModel.SINGLE_TREE_SELECTION);
+        @Override
+        public void removeTreeModelListener(TreeModelListener listener) {
+            listeners.remove(listener);
+        }
 
-		// Añadimos un listener que se ejecutará cuando seleccionemos un
-		// elemento del árbol
-		tree.addTreeSelectionListener(new TreeSelectionListener() {
-			public void valueChanged(TreeSelectionEvent e) {
-				loadChildrenLazily(e.getPath());
-				if (selectionActionlistener != null) {
-					JComponent tree = (JComponent) e.getSource();
-					ActionEvent event = new BrowserActionEvent(
-							tree.getParent(), SELECTION_ACTION, "select", null);
-					selectionActionlistener.actionPerformed(event);
-				}
-			}
-		});
-		tree.addMouseListener(new MouseListener() {
-			public void mouseClicked(MouseEvent arg0) {
-				if (arg0.getClickCount() == 2) {
-					JTree tree = (JTree) arg0.getSource();
+        public void reload() {
+            TreeModelEvent event = new TreeModelEvent(this, new TreePath(this.root));
+            Iterator<TreeModelListener> iterator = listeners.iterator();
+            TreeModelListener listener;
+            while (iterator.hasNext()) {
+                listener = iterator.next();
+                listener.treeStructureChanged(event);
+            }
+        }
+    }
 
-					if (!tree.isSelectionEmpty()) {
-						startingScript(tree.getSelectionPath());
-					}
+    class ScriptingFolderTreeModelFoldersOnly extends ScriptingFolderTreeModel {
 
-				}
-			}
+        public ScriptingFolderTreeModelFoldersOnly(ScriptingFolder root) {
+            super(root);
+        }
 
-			public void mouseEntered(MouseEvent arg0) {
-			}
+        @Override
+        public Object getChild(Object parent, int index) {
+            ScriptingFolder folder = (ScriptingFolder) parent;
+            List<ScriptingFolder> children = folder.getUnitFolders();
+            return children.get(index);
+        }
 
-			public void mouseExited(MouseEvent arg0) {
-			}
+        @Override
+        public int getChildCount(Object parent) {
+            if (!(parent instanceof ScriptingFolder)) {
+                return 0;
+            }
+            ScriptingFolder folder = (ScriptingFolder) parent;
+            return folder.getUnitFolders().size();
+        }
 
-			public void mousePressed(MouseEvent arg0) {
-			}
+        @Override
+        public int getIndexOfChild(Object parent, Object child) {
+            String childPath = ((ScriptingFolder) child).getFile().getAbsolutePath();
+            ScriptingFolder folder = (ScriptingFolder) parent;
+            List<ScriptingFolder> children = folder.getUnitFolders();
+            for (int i = 0; i < children.size(); i++) {
+                ScriptingUnit aChild = children.get(i);
+                if (aChild.getFile().getAbsolutePath().equals(childPath)) {
+                    return i;
+                }
+            }
+            return -1;
+        }
 
-			public void mouseReleased(MouseEvent arg0) {
-			}
-		});
+    }
 
-		// Indica si el nodo raíz actúa como un nodo más o queda desplegado
-		// de manera fija
-		tree.setShowsRootHandles(true);
+    public DefaultJScriptingBrowser(ScriptingUIManager uimanager,
+            ScriptingFolder root) {
+        this(uimanager, root, false);
+    }
 
-		// Añadimos el Scroll
-		JScrollPane scrollPane = new JScrollPane(tree);
-		add(scrollPane);
+    public DefaultJScriptingBrowser(ScriptingUIManager uimanager,
+            ScriptingFolder root, boolean foldersOnly) {
+        super(new GridLayout(1, 2));
+        this.foldersOnly = foldersOnly;
+        this.uimanager = uimanager;
+        this.manager = uimanager.getManager();
+        this.root = root;
+        this.makeUI();
+    }
 
-	}
+    public void refresh() {
+        ((ScriptingFolderTreeModel) this.treeModel).reload();
+    }
 
-	@Override
-	public ScriptingUnit getSelectedNode() {
-		DefaultMutableTreeNode node;
-		if (tree.getSelectionPath() != null) {
-			node = (DefaultMutableTreeNode) tree.getSelectionPath()
-					.getLastPathComponent();
-		} else {
-			node = this.rootNode;
-		}
-		return ((ScriptingUnit) ((IconData) (node.getUserObject())).m_data);
-	}
+    @Override
+    public ScriptingManager getManager() {
+        return this.manager;
+    }
 
-	private void startingScript(TreePath path) {
-		DefaultMutableTreeNode node = (DefaultMutableTreeNode) path
-				.getLastPathComponent();
-		ScriptingUnit unit = ((ScriptingUnit) ((IconData) (node.getUserObject())).m_data);
+    @Override
+    public ScriptingFolder getRoot() {
+        return this.root;
+    }
 
-		if (unit instanceof ScriptingBaseScript) {
-			if (this.defaultActionlistener != null) {
-				ActionEvent event = new BrowserActionEvent(this,
-						DEFAULT_ACTION, "default", (ScriptingBaseScript) unit);
-				this.defaultActionlistener.actionPerformed(event);
-			}
-		}
-	}
+    public void addDefaultActionListener(ActionListener actionlistener) {
+        this.defaultActionlistener = actionlistener;
+    }
 
-	/**
-	 * Función para el despliegue de los hijos de un nodo bajo demanda.
-	 **/
-	private void loadChildrenLazily(TreePath path) {
-		// Mediante el path recuperamos el último nodo, del que
-		// queremos obtener sus hijos dinámicamente
-		DefaultMutableTreeNode node = (DefaultMutableTreeNode) path
-				.getLastPathComponent();
-		ScriptingUnit unit = ((ScriptingUnit) ((IconData) (node.getUserObject())).m_data);
+    public void addSelectionActionListener(ActionListener actionlistener) {
+        this.selectionActionlistener = actionlistener;
+    }
 
-		List<ScriptingUnit> files = null;
+    public void addDropDownActionListener(ActionListener actionlistener) {
+        this.dropDownActionlistener = actionlistener;
+    }
 
-		// Si es un ScriptingFolder y no hemos obtenido previamente sus hijos
-		if (unit instanceof ScriptingFolder && node.getChildCount() == 0) {
-			// Obtenemos los hijos
-			files = ((ScriptingFolder) unit).getUnits();
+    private void makeUI() {
+        if (this.foldersOnly) {
+            treeModel = new ScriptingFolderTreeModelFoldersOnly(root);
+        } else {
+            treeModel = new ScriptingFolderTreeModel(root);
+        }
 
-			ScriptingUnit subunit = null;
+        tree = new JTree(treeModel);
+        tree.setCellRenderer(new IconCellRenderer());
+        tree.setEditable(false);
+        tree.setShowsRootHandles(true);
+        tree.getSelectionModel().setSelectionMode(
+                TreeSelectionModel.SINGLE_TREE_SELECTION);
 
-			for (int i = 0; i < files.size(); i++) {
-				subunit = files.get(i);
-				if ((this.foldersOnly && subunit instanceof ScriptingFolder)
-						|| !this.foldersOnly) {
-					// Obtenemos los iconos específicos para ese tipo de objeto
-					String[] iconNames = subunit.getIconNames();
+        tree.addTreeSelectionListener(new TreeSelectionListener() {
+            @Override
+            public void valueChanged(TreeSelectionEvent e) {
+                if (selectionActionlistener != null) {
+                    JComponent tree = (JComponent) e.getSource();
+                    ActionEvent event = new BrowserActionEvent(
+                            tree.getParent(),
+                            SELECTION_ACTION,
+                            "select",
+                            null
+                    );
+                    selectionActionlistener.actionPerformed(event);
+                }
+            }
+        });
+        tree.addMouseListener(new MouseListener() {
+            @Override
+            public void mouseClicked(MouseEvent arg0) {
+                if (arg0.getClickCount() == 2) {
+                    JTree tree = (JTree) arg0.getSource();
+                    if (!tree.isSelectionEmpty()) {
+                        fireDefaultAction(tree.getSelectionPath());
+                    }
+                }
+            }
 
-					// Creamos el objeto IconData, con la información
-					// del objeto y de hasta 2 iconos asociados
-					IconData data = new IconData(
-							this.uimanager.getIcon(iconNames[0]),
-							this.uimanager.getIcon(iconNames[1]), subunit);
+            @Override
+            public void mouseEntered(MouseEvent arg0) {
+            }
 
-					// Insertamos en el árbol el nuevo objeto creado
-					addObject(node, data);
-				}
-			}
-		}
+            @Override
+            public void mouseExited(MouseEvent arg0) {
+            }
 
-	}
+            @Override
+            public void mousePressed(MouseEvent arg0) {
+            }
 
-	/**
-	 * Función para la inicialización de los datos del árbol.
-	 **/
-	private void initializeTree() {
+            @Override
+            public void mouseReleased(MouseEvent arg0) {
+            }
+        });
+        JScrollPane scrollPane = new JScrollPane(tree);
+        add(scrollPane);
+    }
 
-		ScriptingUnit unit = null;
+    @Override
+    public ScriptingUnit getSelectedNode() {
+        ScriptingUnit unit;
+        if (tree.getSelectionPath() != null) {
+            unit = (ScriptingUnit) tree.getSelectionPath().getLastPathComponent();
+        } else {
+            unit = (ScriptingUnit) this.treeModel.getRoot();
+        }
+        return unit;
+    }
 
-		List<ScriptingUnit> files = this.root.getUnits();
+    private void fireDefaultAction(TreePath path) {
+        ScriptingUnit unit = (ScriptingUnit) path.getLastPathComponent();
+        if (unit instanceof ScriptingBaseScript) {
+            if (this.defaultActionlistener != null) {
+                ActionEvent event = new BrowserActionEvent(
+                        this,
+                        DEFAULT_ACTION,
+                        "default",
+                        (ScriptingBaseScript) unit
+                );
+                this.defaultActionlistener.actionPerformed(event);
+            }
+        }
+    }
 
-		for (int i = 0; i < files.size(); i++) {
-			unit = files.get(i);
-			String fname_unit = "(unknow)";
-			try {
-				fname_unit = unit.getFile().getAbsolutePath();
-				if ((this.foldersOnly && unit instanceof ScriptingFolder)
-						|| !this.foldersOnly) {
-					String[] iconNames = unit.getIconNames();
+    private class IconCellRenderer extends JLabel implements TreeCellRenderer {
 
-					IconData data = new IconData(
-							uimanager.getIcon(iconNames[0]),
-							uimanager.getIcon(iconNames[1]), unit);
-					// Insertamos en el nodo raiz del arbol
-					this.addObject(this.rootNode, data);
-				}
-			} catch (Exception ex) {
-				logger.warn("Can't add script unit '"+fname_unit+"' to the tree.", ex);
-			}
-		}
+        /**
+         *
+         */
+        private static final long serialVersionUID = 1L;
+        protected Color m_textSelectionColor;
+        protected Color m_textNonSelectionColor;
+        protected Color m_bkSelectionColor;
+        protected Color m_bkNonSelectionColor;
+        protected Color m_borderSelectionColor;
 
-	}
+        protected boolean m_selected;
 
-	/**
-	 * Función para añadir un hijo al nodo actual.
-	 **/
-	// private DefaultMutableTreeNode addObject(Object child) {
-	// DefaultMutableTreeNode parentNode = rootNode;
-	// return addObject(parentNode, child, true);
-	// }
+        public IconCellRenderer() {
+            super();
+            m_textSelectionColor = UIManager
+                    .getColor("Tree.selectionForeground");
+            m_textNonSelectionColor = UIManager.getColor("Tree.textForeground");
+            m_bkSelectionColor = UIManager.getColor("Tree.selectionBackground");
+            m_bkNonSelectionColor = UIManager.getColor("Tree.textBackground");
+            m_borderSelectionColor = UIManager
+                    .getColor("Tree.selectionBorderColor");
+            setOpaque(false);
+        }
 
-	private DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,
-			Object child) {
-		return addObject(parent, child, false);
-	}
+        private Map<String, ImageIcon> icons = new HashMap<String, ImageIcon>();
 
-	private DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,
-			Object child, boolean shouldBeVisible) {
-		DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(child);
+        private ImageIcon getIcon(String iconName) {
+            ImageIcon img = this.icons.get(iconName);
+            if (img == null) {
+                img = uimanager.getIcon(iconName);
+                this.icons.put(iconName, img);
+            }
+            return img;
+        }
 
-		// Si no especificamos padre, lo colgará del raíz
-		if (parent == null) {
-			parent = rootNode;
-		}
+        private ImageIcon getExpandedIcon(ScriptingUnit unit) {
+            return getIcon(unit.getIconNames()[1]);
+        }
 
-		// Insertamos el nuevo nodo en el modelo del árbol
-		treeModel.insertNodeInto(childNode, parent, parent.getChildCount());
+        private ImageIcon getCollapsedIcon(ScriptingUnit unit) {
+            return getIcon(unit.getIconNames()[0]);
+        }
 
-		// Para que el usuario pueda ver el nuevo nodo
-		if (shouldBeVisible) {
-			tree.scrollPathToVisible(new TreePath(childNode.getPath()));
-		}
+        public Component getTreeCellRendererComponent(JTree tree, Object value,
+                boolean sel, boolean expanded, boolean leaf, int row,
+                boolean hasFocus) {
+            ScriptingUnit unit = (ScriptingUnit) value;
+            setText(unit.getName());
+            if (expanded) {
+                setIcon(this.getExpandedIcon(unit));
+            } else {
+                setIcon(this.getCollapsedIcon(unit));
+            }
 
-		return childNode;
-	}
+            setFont(tree.getFont());
+            setForeground(sel ? m_textSelectionColor : m_textNonSelectionColor);
+            setBackground(sel ? m_bkSelectionColor : m_bkNonSelectionColor);
+            m_selected = sel;
+            return this;
+        }
 
-	/**
-	 * Clase IconData permite asociar hasta dos iconos (para cuando está
-	 * expandido y cuando no) a un objeto del árbol
-	 **/
-	static private class IconData {
-		protected Icon m_icon;
-		protected Icon m_expandedIcon;
-		protected Object m_data;
+        @Override
+        public void paintComponent(Graphics g) {
+            Color bColor = getBackground();
+            Icon icon = getIcon();
 
-		public IconData(Icon icon, Icon expandedIcon, Object data) {
-			m_icon = icon;
-			m_expandedIcon = expandedIcon;
-			m_data = data;
-		}
+            g.setColor(bColor);
+            int offset = 0;
+            if (icon != null && getText() != null) {
+                offset = (icon.getIconWidth() + getIconTextGap());
+            }
+            g.fillRect(offset, 0, getWidth() - 1 - offset, getHeight() - 1);
 
-		public Icon getIcon() {
-			return m_icon;
-		}
+            if (m_selected) {
+                g.setColor(m_borderSelectionColor);
+                g.drawRect(offset, 0, getWidth() - 1 - offset, getHeight() - 1);
+            }
+            super.paintComponent(g);
+        }
+    }
 
-		public Icon getExpandedIcon() {
-			return m_expandedIcon != null ? m_expandedIcon : m_icon;
-		}
-
-		@Override
-		public String toString() {
-			return m_data.toString();
-		}
-	}
-
-	private class IconCellRenderer extends JLabel implements TreeCellRenderer {
-
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = 1L;
-		protected Color m_textSelectionColor;
-		protected Color m_textNonSelectionColor;
-		protected Color m_bkSelectionColor;
-		protected Color m_bkNonSelectionColor;
-		protected Color m_borderSelectionColor;
-
-		protected boolean m_selected;
-
-		public IconCellRenderer() {
-			super();
-			m_textSelectionColor = UIManager
-					.getColor("Tree.selectionForeground");
-			m_textNonSelectionColor = UIManager.getColor("Tree.textForeground");
-			m_bkSelectionColor = UIManager.getColor("Tree.selectionBackground");
-			m_bkNonSelectionColor = UIManager.getColor("Tree.textBackground");
-			m_borderSelectionColor = UIManager
-					.getColor("Tree.selectionBorderColor");
-			setOpaque(false);
-		}
-
-		public Component getTreeCellRendererComponent(JTree tree, Object value,
-				boolean sel, boolean expanded, boolean leaf, int row,
-				boolean hasFocus)
-
-		{
-			DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
-			Object obj = node.getUserObject();
-			setText(obj.toString());
-
-			if (obj instanceof Boolean)
-				setText(uimanager.getTranslation("Retrieving_data"));
-
-			if (obj instanceof IconData) {
-				IconData idata = (IconData) obj;
-				if (expanded)
-					setIcon(idata.getExpandedIcon());
-				else
-					setIcon(idata.getIcon());
-			} else
-				setIcon(null);
-
-			setFont(tree.getFont());
-			setForeground(sel ? m_textSelectionColor : m_textNonSelectionColor);
-			setBackground(sel ? m_bkSelectionColor : m_bkNonSelectionColor);
-			m_selected = sel;
-			return this;
-		}
-
-		@Override
-		public void paintComponent(Graphics g) {
-			Color bColor = getBackground();
-			Icon icon = getIcon();
-
-			g.setColor(bColor);
-			int offset = 0;
-			if (icon != null && getText() != null)
-				offset = (icon.getIconWidth() + getIconTextGap());
-			g.fillRect(offset, 0, getWidth() - 1 - offset, getHeight() - 1);
-
-			if (m_selected) {
-				g.setColor(m_borderSelectionColor);
-				g.drawRect(offset, 0, getWidth() - 1 - offset, getHeight() - 1);
-			}
-			super.paintComponent(g);
-		}
-	}
-
 }
