2016-03-29 8 views
0

私はキャンバスを表示するエディタを作成しました。私は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に制限できるかわかりません。

答えて

2

すべてのファイルが有効な.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(); 
} 
+0

作品:

次にあなたがファイルを実行する必要が何をすべきか。どうもありがとうございました。 私は、拡張ファイルがsvgであるかどうかを確認するためのすべてのパスを参照する以外の解決策があるかどうか疑問に思っていました。 – Beginner

+0

@Beginner喜んでそれはあなたのために働く。ループのない方法は考えられません。お待ちして、他の回答がポップアップしているかどうかを確認してください。そうでない場合、私の答えをある時点で受け入れることを検討してください。 – Baz

関連する問題