Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragSource;
import java.awt.dnd.DragSourceContext;
import java.awt.dnd.DragSourceDragEvent;
import java.awt.dnd.DragSourceDropEvent;
import java.awt.dnd.DragSourceEvent;
import java.awt.dnd.DragSourceListener;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.awt.dnd.InvalidDnDOperationException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Main extends JFrame implements ActionListener, DropTargetListener {
    DragLabel source = new DragLabel("Drag and drop me to the following JButton", JLabel.CENTER);

    JButton target = new JButton();

    Main(String title) {
        super(title);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        source.setForeground(Color.red);
        getContentPane().add(source, BorderLayout.NORTH);

        target.addActionListener(this);
        getContentPane().add(target, BorderLayout.SOUTH);

        new DropTarget(target, DnDConstants.ACTION_COPY_OR_MOVE, this);

        setSize(205, 100);

        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        JButton b = (JButton) e.getSource();
        b.setText("");
        source.setText("Drag and drop me to the following JButton");
    }

    public void dragEnter(DropTargetDragEvent e) {
        System.out.println("Entering drop target #1");
    }

    public void dragExit(DropTargetEvent e) {
        System.out.println("Exiting drop target #1");
    }

    public void dragOver(DropTargetDragEvent e) {
        System.out.println("Dragging over drop target #1");
    }

    public void drop(DropTargetDropEvent e) {
        System.out.println("Dropping");

        try {
            Transferable t = e.getTransferable();

            if (e.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                e.acceptDrop(e.getDropAction());

                String s;
                s = (String) t.getTransferData(DataFlavor.stringFlavor);

                target.setText(s);

                e.dropComplete(true);
            } else
                e.rejectDrop();
        } catch (java.io.IOException e2) {
        } catch (UnsupportedFlavorException e2) {
        }
    }

    public void dropActionChanged(DropTargetDragEvent e) {
        System.out.println("Drop action changed #1");
    }

    public static void main(String[] args) {
        new Main("Drag and Drop Demo");
    }
}

class DragLabel extends JLabel implements DragGestureListener, DragSourceListener {
    private DragSource ds = DragSource.getDefaultDragSource();

    public DragLabel(String s, int alignment) {
        super(s, alignment);

        int action = DnDConstants.ACTION_COPY_OR_MOVE;
        ds.createDefaultDragGestureRecognizer(this, action, this);
    }

    public void dragGestureRecognized(DragGestureEvent e) {
        try {
            Transferable t = new StringSelection(getText());

            e.startDrag(DragSource.DefaultCopyNoDrop, t, this);
        } catch (InvalidDnDOperationException e2) {
            System.out.println(e2);
        }
    }

    public void dragDropEnd(DragSourceDropEvent e) {
        System.out.println("Drag and drop end");

        if (e.getDropSuccess() == false) {
            System.out.println("unsuccessful");
            return;
        }

        int action = e.getDropAction();
        if ((action & DnDConstants.ACTION_MOVE) != 0)
            setText("");
    }

    public void dragEnter(DragSourceDragEvent e) {
        System.out.println("Entering drop target #2");

        DragSourceContext ctx = e.getDragSourceContext();

        int action = e.getDropAction();
        if ((action & DnDConstants.ACTION_COPY) != 0)
            ctx.setCursor(DragSource.DefaultCopyDrop);
        else
            ctx.setCursor(DragSource.DefaultCopyNoDrop);
    }

    public void dragExit(DragSourceEvent e) {
        System.out.println("Exiting drop target #2");
    }

    public void dragOver(DragSourceDragEvent e) {
        System.out.println("Dragging over drop target #2");
    }

    public void dropActionChanged(DragSourceDragEvent e) {
        System.out.println("Drop action changed #2");
    }
}