import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.Graphics; 

import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTree; 
import javax.swing.LookAndFeel; 
import javax.swing.TransferHandler; 
import javax.swing.UIManager; 
import javax.swing.plaf.metal.MetalLookAndFeel; 

public class DnDErrorMain 
{ 

    public DnDErrorMain() 
    { 
        try 
        { 
            final LookAndFeel laf = new MetalLookAndFeel(); 
            UIManager.setLookAndFeel(laf); 
        } 
        catch (final Exception ex) 
        { 
            System.err.println("Could not install DesktopLookAndFeel look and feel: " + ex); 
            ex.printStackTrace(); 
            Thread.dumpStack(); 
        } 
    } 
     
    private void createAndShowGUI() 
    { 
        JFrame.setDefaultLookAndFeelDecorated(true); 

        final JFrame treeFrame = new JFrame("Tree Frame"); 
        treeFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        treeFrame.setBounds(100, 100, 800, 1200); 
        treeFrame.setLayout(new BorderLayout()); 
        treeFrame.getContentPane().add(createTreePanel(), BorderLayout.CENTER); 
        treeFrame.setVisible(true); 

     
        final JFrame paneFrame = new JFrame("Drop Frame"); 
        paneFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        paneFrame.setBounds(800, 150, 800, 1200); 
        paneFrame.setLayout(new BorderLayout()); 
        paneFrame.getContentPane().add(createDropPanel(), BorderLayout.CENTER); 
        paneFrame.setVisible(true); 
    } 


    private JComponent createDropPanel() 
    { 
        JPanel dropPanel = new JPanel(new BorderLayout()) 
                { 
                    @Override 
                    protected void paintComponent(Graphics g) 
                    { 
                        try 
                        { 
                            Thread.sleep(200); 
                        } 
                        catch( InterruptedException e ) 
                        { 
                            e.printStackTrace(); 
                        } 
                        super.paintComponent(g); 
                    } 
                }; 

        dropPanel.add(new JLabel("DropPanel"), BorderLayout.NORTH); 

        dropPanel.setTransferHandler(new TransferHandler() 
        { 
            @Override 
            public boolean canImport(TransferSupport support) 
            { 
                dropPanel.repaint(); 
                return true; 
            } 
        }); 

        return dropPanel; 
    } 

    private JComponent createTreePanel() 
    { 
        JPanel treePanel = new JPanel(new BorderLayout()); 
        JTree tree = new JTree(); 
        tree.setDragEnabled(true); 
        treePanel.add(tree, BorderLayout.CENTER); 
         
        return treePanel; 
    } 

    public static void main(String[] args) 
    { 
        final DnDErrorMain main = new DnDErrorMain(); 
        EventQueue.invokeLater(() -> main.createAndShowGUI()); 
    } 

} 
