Illustrates dragging : Drag Drop « SWT JFace Eclipse « Java






Illustrates dragging

Illustrates dragging


//Send questions, comments, bug reports, etc. to the authors:

//Rob Warner (rwarner@interspatial.com)
//Robert Harris (rbrt_harris@yahoo.com)

import org.eclipse.swt.*;
import org.eclipse.swt.dnd.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

/**
 * This program illustrates dragging
 */
public class SnippetBoard {
  /**
   * Runs the application
   */
  public void run() {
    Display display = new Display();
    Shell shell = new Shell(display);
    createContents(shell);
    shell.open();

    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }

    display.dispose();
  }

  private void createContents(Shell shell) {
    shell.setLayout(new FillLayout());

    Table table = new Table(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);

    // Create the types
    Transfer[] types = new Transfer[] { TextTransfer.getInstance()};
    
    // Create the drag source
    DragSource source = new DragSource(table, DND.DROP_MOVE | DND.DROP_COPY);
    source.setTransfer(types);
    source.addDragListener(new DragSourceAdapter() {
      public void dragSetData(DragSourceEvent event) {
        // Get the selected items in the drag source
        DragSource ds = (DragSource) event.widget;
        Table table = (Table) ds.getControl();
        TableItem[] selection = table.getSelection();
        
        // Create a buffer to hold the selected items and fill it
        StringBuffer buff = new StringBuffer();
        for (int i = 0, n = selection.length; i < n; i++) {
          buff.append(selection[i].getText());
        }
        
        // Put the data into the event
        event.data = buff.toString();
      }
    });
    
    // Create the drop target
    DropTarget target = new DropTarget(table, 
      DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT);
    target.setTransfer(types);
    target.addDropListener(new DropTargetAdapter() {
      public void dragEnter(DropTargetEvent event) {
        if (event.detail == DND.DROP_DEFAULT) {
          event.detail = (event.operations & DND.DROP_COPY) != 0 ? DND.DROP_COPY
            : DND.DROP_NONE;
        }

        // Allow dropping text only
        for (int i = 0, n = event.dataTypes.length; i < n; i++) {
          if (TextTransfer.getInstance().isSupportedType(event.dataTypes[i])) {
            event.currentDataType = event.dataTypes[i];
          }
        }
      }

      public void dragOver(DropTargetEvent event) {
        // Provide visual feedback
        event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL;
      }

      public void drop(DropTargetEvent event) {
        // If any text was dropped . . .
        if (TextTransfer.getInstance().isSupportedType(event.currentDataType)) {
          // Get the dropped data
          DropTarget target = (DropTarget) event.widget;
          Table table = (Table) target.getControl();
          String data = (String) event.data;
          
          // Create a new item in the table to hold the dropped data
          TableItem item = new TableItem(table, SWT.NONE);
          item.setText(new String[] { data});
          table.redraw();
        }
      }
    });

    TableColumn column = new TableColumn(table, SWT.NONE);

    // Seed the table
    TableItem item = new TableItem(table, SWT.NONE);
    item.setText(new String[] { "private static final int"});
    item = new TableItem(table, SWT.NONE);
    item.setText(new String[] { "String"});
    item = new TableItem(table, SWT.BORDER);
    item.setText(new String[] { "private static void main(String[] args) {"});
    
    column.pack();
  }
  
  /**
   * The application entry point
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    new SnippetBoard().run();
  }
}

           
       








Related examples in the same category

1.SWT DND (Drag and Drop) comprehensive Example SWT DND (Drag and Drop) comprehensive Example
2.Word JumblesWord Jumbles
3.Simple DND (Drag and Drop) ExampleSimple DND (Drag and Drop) Example
4.SWT DnD (Drag and drop) Composite
5.Drag and Drop: determine native data types available (motif only)
6.Drag and Drop: determine data types available (win32 only)Drag and Drop: determine data types available (win32 only)
7.Drag and Drop example snippet: define a default operation (in this example, Copy)Drag and Drop example snippet: define a default operation (in this example, Copy)
8.Drag and Drop example snippet: define my own data transfer typeDrag and Drop example snippet: define my own data transfer type
9.Drag and Drop example snippet: drag leaf items in a treeDrag and Drop example snippet: drag leaf items in a tree
10.Drag and Drop example snippet: drag text between two labelsDrag and Drop example snippet: drag text between two labels