トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

DnD

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()]);

最終更新時間:2005年11月24日 08時08分05秒