演示代码如下: package swt_jface.demo11; 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) { int operations = DND.DROP_MOVE; final DragSource dragSource = new DragSource(label, operations); Transfer[] formats = new Transfer[] { TextTransfer.getInstance()}; dragSource.setTransfer(formats); dragSource.addDragListener(new DragSourceListener() { public void dragStart(DragSourceEvent event) { if (label.getText().length() == 0) event.doit = false; } public void dragSetData(DragSourceEvent event) { if (TextTransfer.getInstance().isSupportedType(event.dataType)) event.data = label.getText(); } public void dragFinished(DragSourceEvent event) { 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); Transfer[] formats = new Transfer[] { TextTransfer.getInstance()}; dropTarget.setTransfer(formats); dropTarget.addDropListener(new DropTargetListener() { public void dragEnter(DropTargetEvent event) { 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); 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; 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(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } public static void main(String[] args) { new WordJumbles("ECLIPSE"); } }