Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 在画布中拖放svg文件_Java_Canvas_Svg_Drag And Drop_Swt - Fatal编程技术网

Java 在画布中拖放svg文件

Java 在画布中拖放svg文件,java,canvas,svg,drag-and-drop,swt,Java,Canvas,Svg,Drag And Drop,Swt,我创建了一个编辑器,在其中显示画布。我想允许svg文件使用DnD 事实上,我允许删除包含这部分代码的文件: int operations = DND.DROP_COPY | DND.DROP_MOVE; Transfer[] types = new Transfer[]{FileTransfer.getInstance()}; DropTarget dt = new DropTarget(parent, operations); dt.setTransfer(types); d

我创建了一个编辑器,在其中显示画布。我想允许svg文件使用DnD

事实上,我允许删除包含这部分代码的文件:

int operations = DND.DROP_COPY | DND.DROP_MOVE;
Transfer[] types = new Transfer[]{FileTransfer.getInstance()};

DropTarget dt = new DropTarget(parent, operations);
    dt.setTransfer(types);
    dt.addDropListener(new DropTargetAdapter() {
    public void drop(DropTargetEvent event) {
    //ToDo
    }
但是它允许任何类型的文件,我只需要.svg文件。 我如何创建一个条件,该条件将检查删除的文件是否是.svg文件,如果是,则使用导入的文件创建一个新画布

我也想恢复掉的文件的路径,你知道我该怎么做吗


我真的不知道如何将导入的文件限制为svg。

假设您的所有文件都具有有效的
.svg
扩展名,请检查适配器中的文件扩展名,仅使用具有正确扩展名的文件,而忽略具有其他扩展名的文件

然后对文件执行您需要执行的操作:

public static void main(String[] args)
{
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("Stackoverflow");
    shell.setLayout(new FillLayout());

    Label label = new Label(shell, SWT.NONE);

    DropTarget target = new DropTarget(label, DND.DROP_DEFAULT | DND.DROP_MOVE | DND.DROP_COPY);

    Transfer[] transfers = new Transfer[]{FileTransfer.getInstance()};

    target.setTransfer(transfers);
    target.addDropListener(new DropTargetAdapter()
    {
        public void drop(DropTargetEvent event)
        {
            if (event.data == null)
            {
                event.detail = DND.DROP_NONE;
                return;
            }

            String[] paths = (String[]) event.data;
            List<File> files = new ArrayList<>();

            for (String path : paths)
            {
                int index = path.lastIndexOf(".");
                if (index != -1)
                {
                    String extension = path.substring(index + 1);
                    if (Objects.equals(extension, "svg"))
                        files.add(new File(path));
                }
            }

            System.out.println(files);
        }
    });

    shell.pack();
    shell.open();
    shell.setSize(400, 300);

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}
publicstaticvoidmain(字符串[]args)
{
最终显示=新显示();
最终外壳=新外壳(显示);
shell.setText(“Stackoverflow”);
setLayout(新的FillLayout());
标签=新标签(外壳,SWT.NONE);
DropTarget target=新的DropTarget(标签,DND.DROP_默认值| DND.DROP_移动| DND.DROP_复制);
传输[]传输=新传输[]{FileTransfer.getInstance()};
target.setTransfer(传输);
addDropListener(新的DropTargetAdapter()
{
公共作废删除(DropTargetEvent事件)
{
如果(event.data==null)
{
event.detail=DND.DROP\u无;
返回;
}
字符串[]路径=(字符串[])event.data;
列表文件=新的ArrayList();
用于(字符串路径:路径)
{
int index=path.lastIndexOf(“.”);
如果(索引!=-1)
{
字符串扩展名=path.substring(索引+1);
if(Objects.equals(扩展名,“svg”))
添加(新文件(路径));
}
}
System.out.println(文件);
}
});
shell.pack();
shell.open();
外壳尺寸(400300);
而(!shell.isDisposed())
{
如果(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

假设您的所有文件都具有有效的
.svg
扩展名,请检查适配器中的文件扩展名,仅使用具有正确扩展名的文件,而忽略具有其他扩展名的文件

然后对文件执行您需要执行的操作:

public static void main(String[] args)
{
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("Stackoverflow");
    shell.setLayout(new FillLayout());

    Label label = new Label(shell, SWT.NONE);

    DropTarget target = new DropTarget(label, DND.DROP_DEFAULT | DND.DROP_MOVE | DND.DROP_COPY);

    Transfer[] transfers = new Transfer[]{FileTransfer.getInstance()};

    target.setTransfer(transfers);
    target.addDropListener(new DropTargetAdapter()
    {
        public void drop(DropTargetEvent event)
        {
            if (event.data == null)
            {
                event.detail = DND.DROP_NONE;
                return;
            }

            String[] paths = (String[]) event.data;
            List<File> files = new ArrayList<>();

            for (String path : paths)
            {
                int index = path.lastIndexOf(".");
                if (index != -1)
                {
                    String extension = path.substring(index + 1);
                    if (Objects.equals(extension, "svg"))
                        files.add(new File(path));
                }
            }

            System.out.println(files);
        }
    });

    shell.pack();
    shell.open();
    shell.setSize(400, 300);

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}
publicstaticvoidmain(字符串[]args)
{
最终显示=新显示();
最终外壳=新外壳(显示);
shell.setText(“Stackoverflow”);
setLayout(新的FillLayout());
标签=新标签(外壳,SWT.NONE);
DropTarget target=新的DropTarget(标签,DND.DROP_默认值| DND.DROP_移动| DND.DROP_复制);
传输[]传输=新传输[]{FileTransfer.getInstance()};
target.setTransfer(传输);
addDropListener(新的DropTargetAdapter()
{
公共作废删除(DropTargetEvent事件)
{
如果(event.data==null)
{
event.detail=DND.DROP\u无;
返回;
}
字符串[]路径=(字符串[])event.data;
列表文件=新的ArrayList();
用于(字符串路径:路径)
{
int index=path.lastIndexOf(“.”);
如果(索引!=-1)
{
字符串扩展名=path.substring(索引+1);
if(Objects.equals(扩展名,“svg”))
添加(新文件(路径));
}
}
System.out.println(文件);
}
});
shell.pack();
shell.open();
外壳尺寸(400300);
而(!shell.isDisposed())
{
如果(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

工作起来很有魅力。非常感谢你。我只是想知道,除了浏览所有路径以检查扩展文件是否是svg之外,是否还有其他解决方案。@初学者很高兴它适合您。想不出一个没有循环的方法。请随时等待,看看是否会弹出其他答案。如果不是,请考虑在某个时候接受我的回答。非常感谢你。我只是想知道,除了浏览所有路径以检查扩展文件是否是svg之外,是否还有其他解决方案。@初学者很高兴它适合您。想不出一个没有循环的方法。请随时等待,看看是否会弹出其他答案。如果不是,请考虑在某个时候接受我的回答。