?? draganddrop1.java
字號:
package cn.com.chengang.swt;
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.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class DragAndDrop1 {
private TextTransfer textTransfer = TextTransfer.getInstance();
private Button sourceText;
private Text targetText;
public static void main(String[] args) {
new DragAndDrop1().open();
}
private void open() {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(300, 100);
// ---------創建窗口中的其他界面組件-------------
// 創建窗口組件
shell.setLayout(new FillLayout());
sourceText = new Button(shell, SWT.NONE);
sourceText.setText("HelloWolrd");
new Label(shell, SWT.NONE);// 分隔區
targetText = new Text(shell, SWT.BORDER);
// --------- 拖動設置-----------------
// 設置sourceText為拖拽源。允許數據被移動或復制
DragSource source = new DragSource(sourceText, DND.DROP_MOVE | DND.DROP_COPY);
source.setTransfer(new Transfer[] { textTransfer });// 設置傳輸載體為文本型
source.addDragListener(new MyDragSourceListener());
// 設置targetText為目標地
DropTarget target = new DropTarget(targetText, DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT);
target.setTransfer(new Transfer[] { textTransfer });
target.addDropListener(new MyDropTargetListener());
// -----------------END------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
private class MyDragSourceListener implements DragSourceListener {
// 判斷是否允許拖拽。這里設定空字串時不允許拖拽
public void dragStart(DragSourceEvent event) {
Button button = getSource(event);// getSource是自定義方法
if (button.getText().trim().equals(""))
event.doit = false;
}
// 自定義方法,取得拖拽源組件
private Button getSource(DragSourceEvent event) {
DragSource source = (DragSource) event.widget;
Button button = (Button) source.getControl();// 即sourceButton
return button;
}
// 設定需要用Transfer傳輸的數據
public void dragSetData(DragSourceEvent event) {
if (textTransfer.isSupportedType(event.dataType)) {// 是否支持拖拽的數據類型
Button button = getSource(event);
event.data = button.getText();
}
}
// 拖拽操作完成后執行此方法
public void dragFinished(DragSourceEvent event) {
if (event.detail == DND.DROP_MOVE) {// 如果是移動,則刪除sourceText中的文字
Button button = getSource(event);
button.setText("");
}
}
}
private class MyDropTargetListener implements DropTargetListener {
// 鼠標進入目標組件時調用此方法
public void dragEnter(DropTargetEvent event) {
// 默認為DND.DROP_DEFAULT,這里將其設為復制;按住Ctrl鍵為DND.DROP_COPY;按住Shift鍵為DND.DROP_MOVE。
if (event.detail == DND.DROP_DEFAULT)
event.detail = DND.DROP_COPY;
}
// 鼠標在目標組件范圍時會不斷調用此方法
public void dragOver(DropTargetEvent event) {
// 在此方法主要設置event.feedback,它的可能值有:
// DND.FEEDBACK_EXPAND 使當前光標下的項展開,以便拖拽到子項上,僅用于樹型組件。
// DND.FEEDBACK_INSERT_AFTER 在某項處于光標下之后顯示一個插入標記,僅用于表格和樹型組件。
// DND.FEEDBACK_INSERT_BEFORE 在某項處于當前光標下之前顯示一個插入標記,僅用于表格和樹型組件。
// DND.FEEDBACK_NONE 什么也不做.
// DND.FEEDBACK_SCROLL 使目標組件可以滾動,以便可以拖到當前看不見的項上,僅用于表格和樹型組件。
// DND.FEEDBACK_SELECT 使當前光標下的項被選中,僅用于表格和樹型組件。
event.feedback = DND.FEEDBACK_NONE;
}
// 當按下或放開輔助按鍵(如Ctrl, Shift)時調用此方法
public void dragOperationChanged(DropTargetEvent event) {
if (event.detail == DND.DROP_DEFAULT)
event.detail = DND.DROP_COPY;
}
// 當鼠標離開目標組件時會調用此方法
public void dragLeave(DropTargetEvent event) {}
// 在完成拖拽操作,執行drop方法之前調用此方法。
public void dropAccept(DropTargetEvent event) {}
// 在完成拖拽操作時最后調用的方法
public void drop(DropTargetEvent event) {
if (textTransfer.isSupportedType(event.currentDataType)) {
String str = (String) event.data;// 取出傳輸數據
DropTarget target = (DropTarget) event.widget;
Text text = (Text) target.getControl();// 即targetText
text.setText(str);
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -