1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
import java.awt.Container;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragSource;
import java.awt.dnd.DragSourceDragEvent;
import java.awt.dnd.DragSourceDropEvent;
import java.awt.dnd.DragSourceEvent;
import java.awt.dnd.DragSourceListener;
import java.io.IOException;
import javax.swing.JButton;
public class MonBoutton extends JButton implements Transferable, DragGestureListener, DragSourceListener{
private static final long serialVersionUID = 1L;
private final DataFlavor darafFlavor = new DataFlavor(JButton.class, "JButton");
private final DataFlavor[] flavors = new DataFlavor[]{darafFlavor};
private final DragSource source;
public MonBoutton(String text) {
super(text);
source = new DragSource();
source.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_MOVE, this);
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return flavors;
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
boolean supported = false;
for (DataFlavor d : getTransferDataFlavors()) {
if (d.equals(flavor)) {
supported = true;
break;
}
}
return supported;
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
Object data = null;
if (isDataFlavorSupported(flavor)) {
data = this;
} else {
throw new UnsupportedFlavorException(flavor);
}
return data;
}
@Override
public void dragDropEnd(DragSourceDropEvent dsde) {
Container parent = getParent();
if (dsde.getDropSuccess() && getParent() != null) {
parent.remove(this);
parent.repaint();
parent.validate();
}
}
@Override
public void dragGestureRecognized(DragGestureEvent dge) {
source.startDrag(dge, DragSource.DefaultMoveDrop,this, this);
}
@Override
public void dragEnter(DragSourceDragEvent dsde) {
}
@Override
public void dragOver(DragSourceDragEvent dsde) {
}
@Override
public void dropActionChanged(DragSourceDragEvent dsde) {
}
@Override
public void dragExit(DragSourceEvent dse) {
}
} |
Partager