ドラッグしてドロップミー
2008/08/15
java
swing
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);
}
}
: