Mega Code Archive

 
Categories / Java / Swing JFC
 

A sample component for dragging and dropping a collection of files into a tree

/* Java Swing, 2nd Edition By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole ISBN: 0-596-00408-7 Publisher: O'Reilly  */ // FSTest.java //A quick test environment for the FSTree component. // import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.TransferHandler; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import javax.swing.tree.TreeNode; public class FSTest extends JFrame {   public FSTest() {     super("FSTree Component Test");     setSize(300, 300);     setDefaultCloseOperation(EXIT_ON_CLOSE);     FSTree fst = new FSTree(new DefaultMutableTreeNode("Starter"));     getContentPane().add(new JScrollPane(fst));     setVisible(true);   }   public static void main(String args[]) {     new FSTest();   } } //FSTree.java //A sample component for dragging & dropping a collection of files //into a tree. // class FSTree extends JTree {   public FSTree() {     super();     init();   }   public FSTree(TreeModel newModel) {     super(newModel);     init();   }   public FSTree(TreeNode root) {     super(root);     init();   }   public FSTree(TreeNode root, boolean asks) {     super(root, asks);     init();   }   private void init() {     // We don't want to export anything from this tree, only import     setDragEnabled(false);     setTransferHandler(new FSTransfer());   }   public class FSTransfer extends TransferHandler {     public boolean importData(JComponent comp, Transferable t) {       // Make sure we have the right starting points       if (!(comp instanceof FSTree)) {         return false;       }       if (!t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {         return false;       }       // Grab the tree, its model and the root node       FSTree tree = (FSTree) comp;       DefaultTreeModel model = (DefaultTreeModel) tree.getModel();       DefaultMutableTreeNode root = (DefaultMutableTreeNode) model           .getRoot();       try {         List data = (List) t             .getTransferData(DataFlavor.javaFileListFlavor);         Iterator i = data.iterator();         while (i.hasNext()) {           File f = (File) i.next();           root.add(new DefaultMutableTreeNode(f.getName()));         }         model.reload();         return true;       } catch (UnsupportedFlavorException ufe) {         System.err.println("Ack! we should not be here.\nBad Flavor.");       } catch (IOException ioe) {         System.out.println("Something failed during import:\n" + ioe);       }       return false;     }     // We only support file lists on FSTrees...     public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {       if (comp instanceof FSTree) {         for (int i = 0; i < transferFlavors.length; i++) {           if (!transferFlavors[i]               .equals(DataFlavor.javaFileListFlavor)) {             return false;           }         }         return true;       }       return false;     }   } }