Es ist ratsam, seine eigenen Transferable zu schreiben, da die einzige Transferable von Sun, StringSelection, von StringReader und nicht von InputStream abstammt und daher ClassCastExceptions verursacht. Wenn einem die DataFlavors nicht reichen, kann man auch da neue implementieren - eine genauere Beschreibung würde hier aber zu weit führen. Mit Hilfe von Transferables kann man über ein Clipboard auch Cut'n'Paste implementieren.
Falls man Java-Objekte in eine Transferable stecken will, sollte man bei java.awt.Image beachten, dass es nicht serializable ist, der Abkömmling javax.swing.ImageIcon allerdings schon! Ausserdem muss man beim Drag'n'Drop von Bildern unter Win32 aufpassen: das Clipboard unterstützt keine Formate wie JPEG oder PNG, sondern BMP u. ä.
Als Codebeispiel folgt eine selbst implementierte rudimentäre StringTransferable.
class StringTransferable implements Transferable{ //weil StringSelection irgendwo buggy ist... String data; DataFlavor remoteFlavor = DataFlavor.plainTextFlavor; DataFlavor localFlavor = DataFlavor.stringFlavor; DataFlavor [] flavors = {remoteFlavor, localFlavor}; public StringTransferable(String data){ this.data = data; } public DataFlavor[] getTransferDataFlavors(){ return flavors; } public boolean isDataFlavorSupported(DataFlavor flavor){ return (flavor == remoteFlavor) || (flavor == localFlavor); } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException{ //das wichtigste if(!isDataFlavorSupported(flavor)){ throw new UnsupportedFlavorException(flavor); } if(flavor.equals(localFlavor)){ //Daten zurueckgeben, lokal return data; } return new ByteArrayInputStream(data.getBytes()); //oder an andere JVM } }