1 package jimm.datavision.gui; 2 import java.awt.datatransfer.*; 3 import java.awt.dnd.*; 4 import java.awt.event.MouseAdapter ; 5 import java.awt.event.MouseEvent ; 6 import javax.swing.*; 7 import javax.swing.tree.*; 8 9 14 public class FieldPickerTree 15 extends JTree 16 implements DragGestureListener, DragSourceListener 17 { 18 19 public FieldPickerTree(DefaultTreeModel model) { 20 super(model); 21 22 DragSource dragSource = DragSource.getDefaultDragSource(); 23 24 dragSource.createDefaultDragGestureRecognizer( 25 this, DnDConstants.ACTION_COPY_OR_MOVE, this); 29 addMouseListener(new MouseAdapter () { 31 public void mousePressed(MouseEvent e) { 32 TreePath selPath = getPathForLocation(e.getX(), e.getY()); 34 if (selPath != null && e.getClickCount() == 2) 35 doubleClicked(selPath); 36 super.mousePressed(e); 37 } 38 }); 39 } 40 41 48 protected void doubleClicked(TreePath selPath) { 49 DefaultMutableTreeNode typeNode = 50 (DefaultMutableTreeNode)getSelectionPath().getLastPathComponent(); 51 Object obj = typeNode.getUserObject(); 52 if (obj instanceof FPLeafInfo) 53 ((FPLeafInfo)obj).openEditor(); 54 } 55 56 public void dragGestureRecognized(DragGestureEvent e) { 57 DefaultMutableTreeNode typeNode = 58 (DefaultMutableTreeNode)getSelectionPath().getLastPathComponent(); 59 Object obj = typeNode.getUserObject(); 60 if (obj instanceof FPLeafInfo) { 61 FPLeafInfo info = (FPLeafInfo)obj; 62 if (info != null) { 63 e.startDrag(DragSource.DefaultCopyDrop, new StringSelection(info.dragString()), this); } 67 } 68 } 69 70 public void dragDropEnd(DragSourceDropEvent e) {} 71 public void dragEnter(DragSourceDragEvent e) {} 72 public void dragExit(DragSourceEvent e) {} 73 public void dragOver(DragSourceDragEvent e) {} 74 public void dropActionChanged(DragSourceDragEvent e) {} 75 76 77 public void removeCurrentNode() { 78 TreePath currentSelection = getSelectionPath(); 79 if (currentSelection != null) { 80 DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) 81 (currentSelection.getLastPathComponent()); 82 MutableTreeNode parent = (MutableTreeNode)(currentNode.getParent()); 83 if (parent != null) { 84 ((DefaultTreeModel)getModel()).removeNodeFromParent(currentNode); 85 } 86 } 87 } 88 89 90 } 91 | Popular Tags |