SWT Jface Eclipse Java

/*******************************************************************************
 * All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie
 * 
 * Created on 2004-4-26 15:46:26 by JACK $Id$
 *  
 ******************************************************************************/
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DragSource;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.DragSourceListener;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.DropTargetListener;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
public class WordJumbles {
  Display display = new Display();
  Shell shell = new Shell(display);
  String word;
  Label[] labelsRowOne;
  Label[] labelsRowTwo;
  Font font = new Font(display, "Arial", 18, SWT.BOLD);
  public void setDragSource(final Label label) {
    //  Allows text to be moved only.
    int operations = DND.DROP_MOVE;
    final DragSource dragSource = new DragSource(label, operations);
    // Data should be transfered in plain text format.
    Transfer[] formats = new Transfer[] { TextTransfer.getInstance()};
    dragSource.setTransfer(formats);
  
    dragSource.addDragListener(new DragSourceListener() {
      public void dragStart(DragSourceEvent event) {
        // Disallows drags if text is not available.
        if (label.getText().length() == 0)
          event.doit = false;
      }
      public void dragSetData(DragSourceEvent event) {
        // Provides the text data.
        if (TextTransfer.getInstance().isSupportedType(event.dataType))
          event.data = label.getText();
      }
      public void dragFinished(DragSourceEvent event) {
        // Removes the text after the move operation.
        if (event.doit == true || event.detail == DND.DROP_MOVE) {
          label.setText("");
        }
      }
    });
    
    label.addDisposeListener(new DisposeListener() {
      public void widgetDisposed(DisposeEvent e) {
        dragSource.dispose();
      }
    });
  }
  public void setDropTarget(final Label label) {
    int operations = DND.DROP_MOVE;
    final DropTarget dropTarget = new DropTarget(label, operations);
    // Data should be transfered in plain text format.
    Transfer[] formats = new Transfer[] { TextTransfer.getInstance()};
    dropTarget.setTransfer(formats);
    dropTarget.addDropListener(new DropTargetListener() {
      public void dragEnter(DropTargetEvent event) {
        // Does not accept any drop if the label has text on it.
        if(label.getText().length() != 0)
          event.detail = DND.DROP_NONE;
      }
      public void dragLeave(DropTargetEvent event) {
      }
      public void dragOperationChanged(DropTargetEvent event) {
      }
      public void dragOver(DropTargetEvent event) {
      }
      public void drop(DropTargetEvent event) {
        if (TextTransfer
          .getInstance()
          .isSupportedType(event.currentDataType)) {
          String text = (String) event.data;
          label.setText(text);
          // Checks the result.
          check();
        }
      }
      public void dropAccept(DropTargetEvent event) {
      }
    });
    
    label.addDisposeListener(new DisposeListener() {
      public void widgetDisposed(DisposeEvent e) {
        dropTarget.dispose();
      }
    });
  }
  
  private void check() {
    for(int i=0; i      if(! labelsRowTwo[i].getText().equals(word.charAt(i) + ""))
        return;
    }
    MessageBox messageBox = new MessageBox(shell);
    messageBox.setMessage("Success!");
    messageBox.open();
  }
  public WordJumbles(String word) {
    this.word = word;
    
    shell.setText("Word Jumbles");
    labelsRowOne = new Label[word.length()];
    labelsRowTwo = new Label[word.length()];
    int width = 40;
    // In the production version, you need to implement random permutation
    // generation.
    // Apache Jakarta Commons provides this function, see
    // org.apache.commons.math.random.RandomDataImpl
    int[] randomPermutation = { 5, 2, 6, 3, 1, 4, 0 };
    for (int i = 0; i < word.length(); i++) {
      final Label labelRowOne = new Label(shell, SWT.BORDER);
      labelsRowOne[i] = labelRowOne;
      labelRowOne.setBounds(10 + width * i, 10, width - 5, width - 5);
      labelRowOne.setFont(font);
      labelRowOne.setText(word.charAt(randomPermutation[i]) + "");
      labelRowOne.setAlignment(SWT.CENTER);
      
      setDragSource(labelRowOne);
      //setDropTarget(labelRowOne);
      final Label labelRowTwo = new Label(shell, SWT.BORDER);
      labelsRowTwo[i] = labelRowTwo;
      labelRowTwo.setBounds(
        10 + width * i,
        20 + width,
        width - 5,
        width - 5);
      labelRowTwo.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
      labelRowTwo.setFont(font);
      labelRowTwo.setAlignment(SWT.CENTER);
      
      setDragSource(labelRowTwo);
      //setDropTarget(labelRowTwo);
    }
    
    shell.pack();
    shell.open();
    //textUser.forceFocus();
    // Set up the event loop.
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        // If no more entries in event queue
        display.sleep();
      }
    }
    display.dispose();
  }
  public static void main(String[] args) {
    new WordJumbles("ECLIPSE");
  }
}