swt 拖拽事件

 

package tests.views;

import org.eclipse.jface.layout.GridDataFactory;
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.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.part.ViewPart;

public class SampleView extends ViewPart {

 public static final String XDEVICE_ID = "tests.views.SampleView";
 public static TreeItem fileItem = null;
 public static TreeItem tmssItem = null;

 public SampleView() {
 }

 @Override
 public void createPartControl(Composite parent) {
  Composite composite = new Composite(parent, SWT.NONE);
  composite.setLayoutData(new GridData(1, 1, true, false));
  composite.setLayout(new FillLayout(SWT.VERTICAL));

  Group upGroup = new Group(composite, SWT.NONE);
  upGroup.setLayoutData(new GridData(1, 1, true, true));
  upGroup.setLayout(new FillLayout());

  // tmss树
  final Tree upTree = new Tree(upGroup, SWT.SINGLE);
  tmssItem = new TreeItem(upTree, SWT.NONE);
  tmssItem.setText("Test Tmss Manager");
  new TreeItem(tmssItem, SWT.NULL).setText("tmsskey1");
  new TreeItem(tmssItem, SWT.NULL).setText("tmsskey2");
  new TreeItem(tmssItem, SWT.NULL).setText("tmsskey3");
  new TreeItem(tmssItem, SWT.NULL).setText("tmsskey4");

  // 本地文件
  Group downGroup = new Group(composite, SWT.NONE);
  downGroup.setLayoutData(new GridData(1, 1, true, true));
  downGroup.setLayout(new FillLayout());
  final Tree downTree = new Tree(downGroup, SWT.SINGLE);
  fileItem = new TreeItem(downTree, SWT.NONE);
  fileItem.setText("Test File Manager");
  new TreeItem(fileItem, SWT.NULL).setText("key1");
  new TreeItem(fileItem, SWT.NULL).setText("key2");
  new TreeItem(fileItem, SWT.NULL).setText("key3");
  new TreeItem(fileItem, SWT.NULL).setText("key4");

  // 定义拖放源对象
  DragSource dragSource = new DragSource(downTree, DND.DROP_MOVE
    | DND.DROP_COPY);

  // 设置传输的数据为文本型String类型
  dragSource.setTransfer(new Transfer[] { TextTransfer.getInstance() });
  // 注册拖放源时的事件处理
  dragSource.addDragListener(new DragSourceListener() {
   public void dragStart(DragSourceEvent event) {
    if (downTree.getSelectionCount() == 0)
     event.doit = false;
   }

   public void dragSetData(DragSourceEvent event) {
    if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
     event.data = downTree.getSelection()[0].getText(0);
     fileItem = downTree.getSelection()[0];
     System.out.println(fileItem);
    }
   }

   public void dragFinished(DragSourceEvent event) {
   }
  });
  // 定义拖放目标对象
  DropTarget dropTarget = new DropTarget(upTree, DND.DROP_MOVE
    | DND.DROP_DEFAULT | DND.DROP_COPY);
  // 设置目标对象可传输的数据类型
  dropTarget.setTransfer(new Transfer[] { TextTransfer.getInstance() });
  // 注册目标对象的事件处理
  dropTarget.addDropListener(new DropTargetListener() {
   public void dragEnter(DropTargetEvent event) {
    if (event.detail == DND.DROP_DEFAULT)
     event.detail = DND.DROP_COPY;
   }

   public void dragOperationChanged(DropTargetEvent event) {
    if (event.detail == DND.DROP_DEFAULT)
     event.detail = DND.DROP_COPY;
   }

   public void dragOver(DropTargetEvent event) {
    event.feedback = DND.FEEDBACK_EXPAND | DND.FEEDBACK_SELECT;
   }

   // 当松开鼠标时触发的事件
   public void drop(DropTargetEvent event) {
    if (event.item == null)
     return;
    // 首先获得目标对象中拖拽的树节点
    TreeItem eventItem = (TreeItem) event.item;
    if(fileItem.getText().equals("Test File Manager"))return ;
      
    if (TextTransfer.getInstance().isSupportedType(
      event.currentDataType)) {
     // 获得数据源设置的字符串
     String s = (String) event.data;
     // 在tmss位置插入一个节点
     if (eventItem.getParentItem() == null)
      tmssItem = new TreeItem(eventItem.getParent(), SWT.NONE);
     else
      tmssItem = new TreeItem(eventItem.getParentItem(), SWT.NONE);
     tmssItem.setText(s);
     // 删除原来的节点
     if (downTree != null) {
      fileItem.dispose();
     }
    }
   }

   public void dragLeave(DropTargetEvent event) {
   }

   public void dropAccept(DropTargetEvent event) {
   }
  });

  // downTree.addDragDetectListener(new DragDetectListener() {
  //
  //
  // @Override
  // public void dragDetected(DragDetectEvent e) {
  // TreeItem[] items = downTree.getSelection();
  // String name = items[0].getText();
  // if (!name.equals(fileItem.getText())){
  // Shell shell = new Shell();
  // new TreeItem(tmssItem, SWT.NULL).setText(name);
  // }
  // }
  // });

  // 对模块进行布局
  GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP)
    .grab(false, false).span(1, 1).applyTo(upGroup);
  GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP)
    .grab(false, false).span(1, 1).applyTo(downGroup);

 }

 @Override
 public void setFocus() {
  // TODO Auto-generated method stub
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值