トップ 一覧 検索 ヘルプ RSS ログイン

DnDの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
org.eclipse.swt.dndパッケージを使用するとSWTアプリケーションにドラッグ&ドロップ機能を実装することができます。以下はドロップされたファイルに対して処理を行うサンプルです。
org.eclipse.swt.dndパッケージを使用するとSWTアプリケーションにドラッグ&ドロップ機能を実装することができます。以下はSWTのウィジェットにドロップされたファイルに対して処理を行うサンプルです。

 Label label = new Label(parent,SWT.NULL);
 label.setText("ここにドロップ");
 
 DropTarget target = new DropTarget(label,DND.DROP_DEFAULT|DND.DROP_COPY);
 FileTransfer transfer = FileTransfer.getInstance();
 Transfer[] types = new Transfer[]{transfer};
 target.setTransfer(types);
 target.addDropListener(new LabelDropListener());
 
 ...
 
 private class LabelDropListener extends DropTargetAdapter {
   
   public void dragEnter(DropTargetEvent evt){
     evt.detail = DND.DROP_COPY;
   }
   
   public void drop(DropTargetEvent evt){
     String[] files = (String[])evt.data;
     for(int i=0;i<files.length;i++){
       File file = new File(files[i]);
       ... // ファイルに対する処理
     }
   }
 }

SWT側からドラッグする場合にはDragSourceを使用します。以下はSWTのウィジェットからファイルをドラッグする場合の例です。

 Label label = new Label(parent,SWT.NULL);
 label.setText("ここからドラッグ");
 
 DragSource source = new DragSource(label, DND.DROP_MOVE | DND.DROP_COPY);
 source.setTransfer(new Transfer[]{FileTransfer.getInstance()});
 source.addDragListener(new DragSourceAdapter(){
   public void dragSetData(DragSourceEvent event){
     java.io.File file = ....;
     event.data = new String[]{file.getAbsolutePath()};
   }
 });

また、このパッケージはクリップボードの使用もサポートします。アプリケーションからクリップボードを利用するにはorg.eclipse.swt.dnd.Clipboardクラスを使用します。テキストをコピーする例を示します。

 String text = "ほげ";
 Clipboard clipboard = new Clipboard(display);
 clipboard.setContents(new Object[]{text},
                       new Transfer[]{TextTransfer.getInstance()]);

バイト配列やファイルをコピーする場合はそれぞれByteArrayTransferやFileTransferを使います。例えばファイルをコピーするなら以下のようになります。

 File file = new File("./hoge.txt");
 clipboard.setContents(new Object[]{file},
                       new Transfer[]{FileTransfer.getInstance()]);