package dnd; import java.io.*; import java.net.URL; import java.awt.datatransfer.*; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.TransferHandler; class CoverTransferHandler extends TransferHandler { private DataFlavor fileFlavor = DataFlavor.javaFileListFlavor; private DataFlavor stringFlavor = DataFlavor.stringFlavor; private JLabel cover; CoverTransferHandler(JLabel cover) { this.cover = cover; } public boolean importData(JComponent c, Transferable t) { if (!canImport(c, t.getTransferDataFlavors())) { return false; } try { if (hasFileFlavor(t.getTransferDataFlavors())) { java.util.List files = (java.util.List) t .getTransferData(fileFlavor); for (int i = 0; i < files.size(); i++) { File file = (File) files.get(i); ImageIcon image = new ImageIcon(file.toURL()); if (image.getIconHeight() > 1 && image.getIconWidth() > 1) { this.cover.setIcon(image); return true; } else { System.err.println("no image"); } } return true; } else if (hasStringFlavor(t.getTransferDataFlavors())) { String str; str = (String) t.getTransferData(stringFlavor); ImageIcon image = new ImageIcon(new URL(str)); if (image.getIconHeight() > 1 && image.getIconWidth() > 1) { this.cover.setIcon(image); return true; } else { System.err.println("no image"); } } } catch (UnsupportedFlavorException ufe) { System.out.println("importData: unsupported data flavor"); } catch (IOException e) { System.err.println(e); } return false; } public int getSourceActions(JComponent c) { return COPY; } public boolean canImport(JComponent c, DataFlavor[] flavors) { if (hasFileFlavor(flavors)) { return true; } if (hasStringFlavor(flavors)) { return true; } return false; } private boolean hasFileFlavor(DataFlavor[] flavors) { for (int i = 0; i < flavors.length; i++) { if (fileFlavor.equals(flavors[i])) { return true; } } return false; } private boolean hasStringFlavor(DataFlavor[] flavors) { for (int i = 0; i < flavors.length; i++) { if (stringFlavor.equals(flavors[i])) { return true; } } return false; } }