SWT JFace 拖曳效果

页面导航:首页 > 软件编程 > Java编程 > SWT JFace 拖曳效果

SWT JFace 拖曳效果

来源:互联网 作者:脚本宝典 时间:2015-07-30 12:57 【

演示代码如下: 复制代码 代码如下: 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

演示代码如下: 

复制代码代码如下:


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"); 
    } 
}


Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<