FSTest.java Source code

Java tutorial

Introduction

Here is the source code for FSTest.java

Source

/*
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;
        }
    }
}