Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SWT中将控件从一个TabItem拖放到另一个TabItem_Java_Drag And Drop_Swt - Fatal编程技术网

Java 如何在SWT中将控件从一个TabItem拖放到另一个TabItem

Java 如何在SWT中将控件从一个TabItem拖放到另一个TabItem,java,drag-and-drop,swt,Java,Drag And Drop,Swt,我试图在SWT中使用DND(拖放)。对于TreeView,它似乎工作得很好。我想在TabFolder中将一个控件(现在的标签)从一个TabItem拖放到另一个TabItem 在这里,我创建了一个TabFolder和两个TabItems,并使用setControl定义每个TabItem中的内容 class DNDTab { TabFolder tabFolder = new TabFolder(composite, SWT.NONE); tabFolder.setLayoutDa

我试图在SWT中使用DND(拖放)。对于
TreeView
,它似乎工作得很好。我想在TabFolder中将一个控件(现在的标签)从一个TabItem拖放到另一个TabItem

在这里,我创建了一个TabFolder和两个TabItems,并使用setControl定义每个TabItem中的内容

class DNDTab {

    TabFolder tabFolder = new TabFolder(composite, SWT.NONE);
    tabFolder.setLayoutData(new GridData(SWT.FILL,GridData.FILL, true, true));

    tabItem = new TabItem(tabFolder, SWT.NONE);
    tabItem.setText("Favorite");
    tabItem.setControl(new CompositeFav(tabFolder));

    tabItem = new TabItem(tabFolder, SWT.NONE);
    tabItem.setText("Verified");
    tabItem.setControl(new CompositeVerified(tabFolder));
}
这里定义了已验证的选项卡项

class CompositeVerified extends Composite {
    CompositeVerified(Composite parent) {
        super(parent, SWT.NONE);
        GridLayout layout = new GridLayout(1, false);
        setLayout(layout);

        String[] testList = {"My TestCase 1", "My TestCase 2",
                "My TestCase 3", "My     TestCase 4", "My TestCase 5"};

        for (int i = 0; i < 5; i++) {
            final Label dragLabel = new Label(this, SWT.NONE);
            dragLabel.setText(testList[i]);
            creatingDragSource(dragLabel);

            /*** createDragSource is my defined function where each label within the TabItem 
             * is made as a drag source using "DragSource source = new DragSource(dragLabel, operations);" 
             ***/
        }

    }
}

拖动源创建得很好,而且拖动似乎有效。但是当我将它放入Fav选项卡项中时,它不会被添加到那里。

选项卡文件夹首先捕获dropTargetEvent。。。 丑陋的黑客:

  • 为tabFolder创建dropTarget
  • 将dropTargetEvent转发到目标组合
像这样:

DropTarget target = new DropTarget(tabFolder, DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT);
        target.setTransfer(transfers);
        target.addDropListener(new DropTargetAdapter() {
            public void dragOver(DropTargetEvent event) {}

            public void dragEnter(DropTargetEvent event){}

            public void dragLeave(DropTargetEvent event){}

            public void drop(DropTargetEvent event) {
                DropTarget target = targetComposite.getData(DND.DROP_TARGET_KEY);
                target.getDropListeners()[0].drop(event);
            }
        });
DropTarget target = new DropTarget(tabFolder, DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT);
        target.setTransfer(transfers);
        target.addDropListener(new DropTargetAdapter() {
            public void dragOver(DropTargetEvent event) {}

            public void dragEnter(DropTargetEvent event){}

            public void dragLeave(DropTargetEvent event){}

            public void drop(DropTargetEvent event) {
                DropTarget target = targetComposite.getData(DND.DROP_TARGET_KEY);
                target.getDropListeners()[0].drop(event);
            }
        });