Mega Code Archive

 
Categories / Java / SWT Jface Eclipse
 

Word Jumbles

/*******************************************************************************  * 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<word.length(); 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");   } }