package mil.navy.nps.logger; import java.awt.*; import java.awt.dnd.*; import java.awt.datatransfer.*; import java.util.Hashtable; import java.util.List; import java.util.Iterator; import java.io.*; import java.io.IOException; import javax.swing.*; /** * This is swiped from the java tutorial on drag & drop. It implements * a JList as both a source and a target for drag & drop operations.

* * @author Sun, DMcG */ public class DNDList extends JList implements DNDComponentInterface, DropTargetListener,DragSourceListener, DragGestureListener { /** * enables this component to be a dropTarget */ DropTarget dropTarget = null; /** * enables this component to be a Drag Source */ DragSource dragSource = null; /** * constructor - initializes the DropTarget and DragSource. */ public DNDList() { dropTarget = new DropTarget (this, this); dragSource = new DragSource(); dragSource.createDefaultDragGestureRecognizer( this, DnDConstants.ACTION_MOVE, this); } /** * Constructor--takes a data model, otherwise the same */ public DNDList(ListModel pListModel) { super(pListModel); dropTarget = new DropTarget (this, this); dragSource = new DragSource(); dragSource.createDefaultDragGestureRecognizer( this, DnDConstants.ACTION_MOVE, this); } /** * is invoked when you are dragging over the DropSite * */ public void dragEnter (DropTargetDragEvent event) { // debug messages for diagnostics System.out.println( "dragEnter"); event.acceptDrag (DnDConstants.ACTION_MOVE); } /** * is invoked when you are exit the DropSite without dropping * */ public void dragExit (DropTargetEvent event) { System.out.println( "dragExit"); } /** * is invoked when a drag operation is going on * */ public void dragOver (DropTargetDragEvent event) { System.out.println( "dragOver"); } /** * a drop has occurred * */ public void drop (DropTargetDropEvent event) { System.out.println("Dropping"); try { Transferable transferable = event.getTransferable(); // we accept only Strings if (transferable.isDataFlavorSupported (DataFlavor.stringFlavor)) { event.acceptDrop(DnDConstants.ACTION_MOVE); String s = (String)transferable.getTransferData ( DataFlavor.stringFlavor); addElement( s ); event.getDropTargetContext().dropComplete(true); } else { System.out.println("Wrong data type for drop"); event.rejectDrop(); } } catch (IOException exception) { exception.printStackTrace(); System.err.println( "Exception" + exception.getMessage()); event.rejectDrop(); } catch (UnsupportedFlavorException ufException ) { ufException.printStackTrace(); System.err.println( "Exception" + ufException.getMessage()); event.rejectDrop(); } } /** * is invoked if the use modifies the current drop gesture * */ public void dropActionChanged ( DropTargetDragEvent event ) { } /** * a drag gesture has been initiated * */ public void dragGestureRecognized( DragGestureEvent event) { Object selected = getSelectedValue(); if ( selected != null ) { StringSelection text = new StringSelection( selected.toString()); // as the name suggests, starts the dragging dragSource.startDrag (event, DragSource.DefaultMoveDrop, text, this); } else { System.out.println( "nothing was selected"); } } /** * this message goes to DragSourceListener, informing it that the dragging * has ended * */ public void dragDropEnd (DragSourceDropEvent event) { if ( event.getDropSuccess()) { removeElement(); } } /** * this message goes to DragSourceListener, informing it that the dragging * has entered the DropSite * */ public void dragEnter (DragSourceDragEvent event) { System.out.println( " dragEnter"); } /** * this message goes to DragSourceListener, informing it that the dragging * has exited the DropSite * */ public void dragExit (DragSourceEvent event) { System.out.println( "dragExit"); } /** * this message goes to DragSourceListener, informing it that the dragging is currently * ocurring over the DropSite * */ public void dragOver (DragSourceDragEvent event) { System.out.println( "dragExit"); } /** * is invoked when the user changes the dropAction * */ public void dropActionChanged ( DragSourceDragEvent event) { System.out.println( "dropActionChanged"); } /** * adds elements to itself * */ public void addElement( Object s ) { (( DefaultListModel )getModel()).addElement (s.toString()); } /** * removes an element from itself */ public void removeElement() { (( DefaultListModel)getModel()).removeElement( getSelectedValue()); } }