package org.rr.jeborker.gui.cell; import java.awt.Component; import java.util.EventObject; import javax.swing.JTree; import javax.swing.event.CellEditorListener; import javax.swing.event.ChangeEvent; import javax.swing.tree.DefaultTreeCellEditor; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreeCellEditor; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; import org.rr.commons.mufs.IResourceHandler; import org.rr.jeborker.gui.MainController; import org.rr.jeborker.gui.model.FileSystemNode; import org.rr.jeborker.gui.resources.ImageResourceBundle; public class FileSystemTreeCellEditor extends DefaultTreeCellEditor { private FileSystemNode editingNode = null; public FileSystemTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer) { super(tree, renderer); addCellEditorListener(new CellEditorListener() { @Override public void editingStopped(ChangeEvent e) { if (editingNode != null) { IResourceHandler resourceHandler = editingNode.getResource().getParentResource(); if (resourceHandler != null) { MainController.getController().getMainTreeHandler().refreshFileSystemTreeEntry(resourceHandler); } } } @Override public void editingCanceled(ChangeEvent e) { } }); } public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) { Component result = super.getTreeCellEditorComponent(tree, value, isSelected, expanded, leaf, row); IResourceHandler file = ((FileSystemNode) value).getResource(); if (file.isDirectoryResource()) { if (file.toString().equals(System.getProperty("user.home"))) { editingIcon = ImageResourceBundle.getResourceAsImageIcon("folder_home_16.png"); } else if (tree.isExpanded(row)) { editingIcon = ImageResourceBundle.FOLDER_OPEN_16_ICON; } else { editingIcon = ImageResourceBundle.FOLDER_CLOSE_16_ICON; } } else { editingIcon = ImageResourceBundle.FILE_16_ICON; } editingNode = (FileSystemNode) value; return result; } @Override public boolean isCellEditable(EventObject event) { if(tree != null && realEditor.isCellEditable(event)) { TreePath selectionPath = tree.getSelectionPath(); if(selectionPath != null) { TreeNode node = (TreeNode) selectionPath.getLastPathComponent(); if (node != null && node.isLeaf()) { return true; } } } return false; } /** * This is invoked if a <code>TreeCellEditor</code> is not supplied in the constructor. It returns a <code>TextField</code> editor. * * @return a new <code>TextField</code> editor */ protected TreeCellEditor createTreeCellEditor() { FileSystemRenameTreeCellEditor editor = new FileSystemRenameTreeCellEditor() { public boolean shouldSelectCell(EventObject event) { boolean retValue = super.shouldSelectCell(event); return retValue; } }; editor.addCellEditorListener(new CellEditorListener() { @Override public void editingStopped(ChangeEvent e) { //otherwise the tree have not the focus after edit tree.requestFocus(); } @Override public void editingCanceled(ChangeEvent e) { } }); return editor; } }