Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.datatransfer.DataFlavor;

import javax.swing.JFrame;
import javax.swing.JPanel;
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.MutableTreeNode;
import javax.swing.tree.TreePath;

public class Main extends JPanel {
    JTree tree;
    DefaultTreeModel treeModel;

    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Main newContentPane = new Main();
        newContentPane.setOpaque(true);
        f.setContentPane(newContentPane);

        f.pack();
        f.setVisible(true);
    }

    public Main() {
        setLayout(new GridLayout(1, 3));
        tree = new JTree(getTreeModel());
        tree.setDragEnabled(true);
        tree.setPreferredSize(new Dimension(200, 400));
        JScrollPane scroll = new JScrollPane();
        scroll.setViewportView(tree);

        treeModel = getTreeModel();
        JTree secondTree = new JTree(treeModel);
        secondTree.setPreferredSize(new Dimension(200, 400));
        secondTree.setTransferHandler(new TransferHandler() {
            @Override
            public boolean importData(TransferSupport support) {
                if (!canImport(support)) {
                    return false;
                }
                JTree.DropLocation dl = (JTree.DropLocation) support.getDropLocation();
                TreePath path = dl.getPath();
                int childIndex = dl.getChildIndex();

                String data;
                try {
                    data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor);
                } catch (Exception e) {
                    return false;
                }
                if (childIndex == -1) {
                    childIndex = tree.getModel().getChildCount(path.getLastPathComponent());
                }

                DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(data);
                DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) path.getLastPathComponent();
                treeModel.insertNodeInto(newNode, parentNode, childIndex);

                tree.makeVisible(path.pathByAddingChild(newNode));
                tree.scrollRectToVisible(tree.getPathBounds(path.pathByAddingChild(newNode)));
                return true;
            }

            public boolean canImport(TransferSupport support) {
                if (!support.isDrop()) {
                    return false;
                }
                support.setShowDropLocation(true);
                if (!support.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                    System.out.println("only string is supported");
                    return false;
                }
                JTree.DropLocation dl = (JTree.DropLocation) support.getDropLocation();
                TreePath path = dl.getPath();
                if (path == null) {
                    return false;
                }
                return true;
            }
        });
        JScrollPane secondScroll = new JScrollPane();
        secondScroll.setViewportView(secondTree);

        JPanel topPanel = new JPanel(new BorderLayout());
        topPanel.add(scroll, BorderLayout.CENTER);
        JPanel btmPanel = new JPanel(new BorderLayout());
        btmPanel.add(secondScroll, BorderLayout.CENTER);

        add(topPanel);
        add(btmPanel);
    }

    private static DefaultTreeModel getTreeModel() {
        MutableTreeNode root = new DefaultMutableTreeNode("1");

        DefaultMutableTreeNode cover = new DefaultMutableTreeNode("A");
        cover.insert(new DefaultMutableTreeNode("P"), 0);
        cover.insert(new DefaultMutableTreeNode("S"), 0);
        root.insert(cover, 0);

        DefaultMutableTreeNode base = new DefaultMutableTreeNode("B");
        base.insert(new DefaultMutableTreeNode("S"), 0);
        base.insert(new DefaultMutableTreeNode("H"), 0);
        root.insert(base, 0);

        DefaultTreeModel model = new DefaultTreeModel(root);
        return model;
    }
}