プログラマメモ2 - programmer no memo2

ドラッグしてドロップミー 2008/08/15

Javaです。

画面上からドラッグしてドロップします。

なんとなくできた感じですが、importするときとちがってコードがちょっとわかりずらいかなぁ

ドロップが成功した場合の処理は、exportDoneに書きます。

ドロップする相手が別アプリケーションの場合どうなるんだろう....


import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.TransferHandler;

public class DragAndDropMe {

public static void main(String[] args) {

JFrame frame = new JFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final JPanel panel = new JPanel();
panel.setTransferHandler(new TransferHandler() {

private static final long serialVersionUID = 1L;

@Override
protected void exportDone(JComponent source, Transferable data,
int action) {
System.out.println("*** exportDone: " + source + " " + data
+ " " + action);
}

@Override
public int getSourceActions(JComponent c) {
System.out.println("*** getSourceActions");
return COPY;
}

@Override
protected Transferable createTransferable(JComponent c) {

System.out.println("*** createTransferable");

return new Transferable() {

@Override
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException, IOException {

System.out.println("+++ getTransferData :[" + flavor
+ "]");
return null;
}

@Override
public DataFlavor[] getTransferDataFlavors() {
System.out.println("+++ getTransferDataFlavors");
return new DataFlavor[] { DataFlavor.stringFlavor,
DataFlavor.javaFileListFlavor };
}

@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return false;
}

};
}
});

panel.addMouseMotionListener(new MouseAdapter() {

@Override
public void mouseDragged(MouseEvent e) {
super.mouseDragged(e);
panel.getTransferHandler().exportAsDrag(
(JComponent) e.getSource(), e, TransferHandler.COPY);
}

});

frame.getContentPane().add(panel);
frame.setVisible(true);

}

}

: