SWT JFace 拖曳效果
SWT JFace 拖曳效果
发布时间:2016-12-28 来源:查字典编辑
摘要:演示代码如下:复制代码代码如下:packageswt_jface.demo11;importorg.eclipse.swt.SWT;impo...

演示代码如下:

复制代码 代码如下:

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

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Java学习
热门Java学习
编程开发子分类