hengheng123456789

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks

          1、拖拽Label的文字。

          ?public static void main (String [] args) {
          ??
          ??Display display = new Display ();
          ??final Shell shell = new Shell (display);
          ??shell.setLayout(new FillLayout());
          ??final Label label1 = new Label (shell, SWT.BORDER);
          ??label1.setText ("TEXT");
          ??final Label label2 = new Label (shell, SWT.BORDER);
          ??setDragDrop (label1);
          ??setDragDrop (label2);
          ??shell.setSize (200, 200);
          ??shell.open ();
          ??while (!shell.isDisposed ()) {
          ???if (!display.readAndDispatch ()) display.sleep ();
          ??}
          ??display.dispose ();
          ?}
          ?
          ?public static void setDragDrop (final Label label) {
          ??
          ??Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
          ??int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
          ??
          ??final DragSource source = new DragSource (label, operations);
          ??source.setTransfer(types);
          ??source.addDragListener (new DragSourceListener () {
          ???public void dragStart(DragSourceEvent event) {
          ????event.doit = (label.getText ().length () != 0);
          ???}
          ???public void dragSetData (DragSourceEvent event) {
          ????event.data = label.getText ();
          ???}
          ???public void dragFinished(DragSourceEvent event) {
          ????if (event.detail == DND.DROP_MOVE)
          ?????label.setText ("");
          ???}
          ??});

          ??DropTarget target = new DropTarget(label, operations);
          ??target.setTransfer(types);
          ??target.addDropListener (new DropTargetAdapter() {
          ???public void drop(DropTargetEvent event) {
          ????if (event.data == null) {
          ?????event.detail = DND.DROP_NONE;
          ?????return;
          ????}
          ????label.setText ((String) event.data);
          ???}
          ??});
          ?}

          2、隨意拖拽Tree子節點。

          ?public static void main (String [] args) {
          ??
          ??final Display display = new Display ();
          ??final Shell shell = new Shell (display);
          ??shell.setLayout(new FillLayout());
          ??//建立用于拖拽的樹
          ??final Tree tree = new Tree(shell, SWT.BORDER);
          ??for (int i = 0; i < 3; i++) {
          ???TreeItem item = new TreeItem(tree, SWT.NONE);
          ???item.setText("item "+i);
          ???for (int j = 0; j < 3; j++) {
          ????TreeItem subItem = new TreeItem(item, SWT.NONE);
          ????subItem.setText("item "+i+" "+j);
          ????for (int k = 0; k < 3; k++) {
          ?????TreeItem subsubItem = new TreeItem(subItem, SWT.NONE);
          ?????subsubItem.setText("item "+i+" "+j+" "+k);
          ????}
          ???}
          ??}
          ??
          ??Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
          ??int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
          ??
          ??//建立拖拽 源————樹tree對象
          ??final DragSource source = new DragSource (tree, operations);
          ??source.setTransfer(types);
          ??final TreeItem[] dragSourceItem = new TreeItem[1];
          ??source.addDragListener (new DragSourceListener () {
          ???public void dragStart(DragSourceEvent event) {
          ????TreeItem[] selection = tree.getSelection();?// 獲取所選tree的節點
          ????if (selection.length > 0 && selection[0].getItemCount() == 0) //判斷所選節點是否存在并且為末端節點
          ????{
          ?????event.doit = true;?//啟動拖拽功能
          ?????dragSourceItem[0] = selection[0]; //保存拖拽節點信息
          ????} else {
          ?????event.doit = false;
          ????}
          ???};
          ???public void dragSetData (DragSourceEvent event) {
          ????event.data = dragSourceItem[0].getText(); //保存拖拽節點信息到事件數據中
          ???}
          ???public void dragFinished(DragSourceEvent event) {
          ????if (event.detail == DND.DROP_MOVE)
          ?????dragSourceItem[0].dispose();
          ?????dragSourceItem[0] = null;
          ???}
          ??});
          ??
          ??//建立拖拽 目的————樹tree對象
          ??DropTarget target = new DropTarget(tree, operations);
          ??target.setTransfer(types);
          ??target.addDropListener (new DropTargetAdapter() {
          ???//處理拖拽到目的上空時的方法
          ???public void dragOver(DropTargetEvent event) {
          ????event.feedback = DND.FEEDBACK_EXPAND | DND.FEEDBACK_SCROLL; //響應拖拽動作,FEEDBACK_EXPAND表示拖拽到可以展開的節點時展開相應節點。
          ????if (event.item != null) {
          ?????TreeItem item = (TreeItem)event.item;
          ?????//處理拖拽動作響應,根據拖拽的位置不同產生不同的響應
          ?????Point pt = display.map(null, tree, event.x, event.y); //獲取拖拽當前位置點
          ?????Rectangle bounds = item.getBounds(); //獲取目的節點的邊框
          ?????
          ?????//根據拖拽當前位置點與目的節點的邊框位置設置響應,如顯示為FEEDBACK_INSERT_BEFORE、FEEDBACK_INSERT_AFTER
          ?????if (pt.y < bounds.y + bounds.height/3) {
          ??????event.feedback |= DND.FEEDBACK_INSERT_BEFORE;
          ?????} else if (pt.y > bounds.y + 2*bounds.height/3) {
          ??????event.feedback |= DND.FEEDBACK_INSERT_AFTER;
          ?????} else {
          ??????event.feedback |= DND.FEEDBACK_SELECT;
          ?????}
          ????}
          ???}
          ???//處理放下時的方法
          ???public void drop(DropTargetEvent event) {
          ????if (event.data == null) {
          ?????event.detail = DND.DROP_NONE;
          ?????return;
          ????}
          ????String text = (String)event.data;
          ????//如果放下的位置沒有節點,則新建立一個節點,以根節點為父節點
          ????if (event.item == null)
          ????{
          ?????TreeItem item = new TreeItem(tree, SWT.NONE);
          ?????item.setText(text);
          ????}
          ????//如果放下的位置有節點
          ????else
          ????{
          ?????TreeItem item = (TreeItem)event.item;
          ?????Point pt = display.map(null, tree, event.x, event.y);
          ?????Rectangle bounds = item.getBounds();
          ?????TreeItem parent = item.getParentItem();
          ?????if (parent != null) {
          ??????TreeItem[] items = parent.getItems();
          ??????int index = 0;
          ??????for (int i = 0; i < items.length; i++) {
          ???????if (items[i] == item) {
          ????????index = i;
          ????????break;
          ???????}
          ??????}
          ??????if (pt.y < bounds.y + bounds.height/3) {
          ???????//以當前節點的父節點為父建立一個子節點,并且插入到當前節點前
          ???????TreeItem newItem = new TreeItem(parent, SWT.NONE, index);
          ???????newItem.setText(text);
          ??????} else if (pt.y > bounds.y + 2*bounds.height/3) {
          ???????//以當前節點的父節點為父建立一個子節點,并且插入到當前節點前
          ???????TreeItem newItem = new TreeItem(parent, SWT.NONE, index+1);
          ???????newItem.setText(text);
          ??????} else {
          ???????//以當前為父節點建立一個子節點
          ???????TreeItem newItem = new TreeItem(item, SWT.NONE);
          ???????newItem.setText(text);
          ??????}
          ??????
          ?????} else {
          ??????TreeItem[] items = tree.getItems();
          ??????int index = 0;
          ??????for (int i = 0; i < items.length; i++) {
          ???????if (items[i] == item) {
          ????????index = i;
          ????????break;
          ???????}
          ??????}
          ??????if (pt.y < bounds.y + bounds.height/3) {
          ???????TreeItem newItem = new TreeItem(tree, SWT.NONE, index);
          ???????newItem.setText(text);
          ??????} else if (pt.y > bounds.y + 2*bounds.height/3) {
          ???????TreeItem newItem = new TreeItem(tree, SWT.NONE, index+1);
          ???????newItem.setText(text);
          ??????} else {
          ???????TreeItem newItem = new TreeItem(item, SWT.NONE);
          ???????newItem.setText(text);
          ??????}
          ?????}
          ?????
          ?????
          ????}
          ???}
          ??});

          ??shell.setSize (400, 400);
          ??shell.open ();
          ??while (!shell.isDisposed ()) {
          ???if (!display.readAndDispatch ()) display.sleep ();
          ??}
          ??display.dispose ();
          ?}

          posted on 2006-11-07 18:05 哼哼 閱讀(1486) 評論(0)  編輯  收藏 所屬分類: SWT
          主站蜘蛛池模板: 化州市| 石渠县| 铜山县| 平凉市| 和政县| 红原县| 休宁县| 雅安市| 泰兴市| 上饶县| 新宁县| 梁平县| 安岳县| 华亭县| 基隆市| 台东市| 东乌| 惠州市| 长葛市| 界首市| 专栏| 平谷区| 资中县| 邛崃市| 兴安盟| 嵩明县| 凤台县| 曲松县| 利辛县| 武鸣县| 平山县| 固始县| 永寿县| 定州市| 西乌珠穆沁旗| 福泉市| 赤水市| 昭通市| 永平县| 旺苍县| 美姑县|