[DnD] LabelSelection class
28/01/2009
package com.pingus.dnd.transferables.handlers; import java.awt.Image; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.TransferHandler; import com.pingus.dnd.transferables.TransferableLabel; import com.pingus.dnd.transferables.TransferableObject; public class LabelSelection extends TransferHandler { private static final DataFlavor[] STANDARD_FLAVORS = new DataFlavor[] { DataFlavor.imageFlavor, DataFlavor.stringFlavor, DataFlavor.getTextPlainUnicodeFlavor() }; /** * Creates a new instance of TreeTransferHandler */ public LabelSelection() { super(); } public int getSourceActions(JComponent c) { return TransferHandler.COPY_OR_MOVE; } protected Transferable createTransferable(final JComponent component) { System.out.println("[LabelTransferHandler] <createTransferable>"); if (component instanceof JLabel) { return new TransferableLabel((JLabel)component, STANDARD_FLAVORS, super.createTransferable(component)); /* return new TransferableObject(component, STANDARD_FLAVORS, super.createTransferable(component)) { public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if(flavor.equals(getPreferredFlavor())) { System.out.println("[LabelTransferHandler] <createTransferable> [TransferableObject] <getTransferData> returning label"); // Return JLabel return component; } else if(flavor.equals(DataFlavor.imageFlavor)) { System.out.println("[LabelTransferHandler] <createTransferable> [TransferableObject] <getTransferData> returning ..."); // Return Image Icon icon = ((JLabel)component).getIcon(); if (icon instanceof ImageIcon) { System.out.println("[LabelTransferHandler] <createTransferable> [TransferableObject] <getTransferData> Image."); return ((ImageIcon) icon).getImage(); } } else if(flavor.equals(DataFlavor.stringFlavor)) { System.out.println("[LabelTransferHandler] <createTransferable> [TransferableObject] <getTransferData> returning label text"); // Return label text return ((JLabel)component).getText(); } else if(flavor.equals(DataFlavor.getTextPlainUnicodeFlavor())) { return this.exportAsInputStream(((JLabel)component).getText(), flavor); } System.out.println("[LabelTransferHandler] <createTransferable> [TransferableObject] <getTransferData> returning nothing"); System.out.println("[LabelTransferHandler] <createTransferable> [TransferableObject] <getTransferData> for flavor "+flavor); return super.getTransferData(flavor); } }; /**/ } return new TransferableObject(component, STANDARD_FLAVORS, super.createTransferable(component)); } public boolean importData(JComponent comp, Transferable t) { System.out.println("[LabelTransferHandler] <inportData>"); if (comp instanceof JLabel) { JLabel label = (JLabel) comp; DataFlavor labelFlavor = new DataFlavor(comp.getClass(), comp.getClass().getName()); try { if (t.isDataFlavorSupported(labelFlavor)) { System.out.println("[LabelTransferHandler] Importing Label"); JLabel dropedObject = (JLabel) t.getTransferData(labelFlavor); System.out.println("[LabelTransferHandler] Setting icon"); label.setIcon(dropedObject.getIcon()); System.out.println("[LabelTransferHandler] Setting text to " + dropedObject.getText()); label.setText(dropedObject.getText()); System.out.println("[LabelTransferHandler] Setting tool tip text to " + dropedObject.getToolTipText()); label.setToolTipText(dropedObject.getToolTipText()); System.out.println("[LabelTransferHandler] Repaint label"); label.repaint(); return true; } else if (t.isDataFlavorSupported(DataFlavor.imageFlavor)) { System.out.println("[LabelTransferHandler] Importing Image ..."); Image image = (Image) t.getTransferData(DataFlavor.imageFlavor); ImageIcon icon = new ImageIcon(image); label.setIcon(icon); return true; } else if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) { System.out.println("[LabelTransferHandler] Importing text ..."); String text = (String)t.getTransferData(DataFlavor.stringFlavor); label.setText(text); return true; } else if (t.isDataFlavorSupported(DataFlavor.getTextPlainUnicodeFlavor())) { label.setText(TransferableObject.importAsInputStream(t)); return true; } } catch (RuntimeException ex) { ex.printStackTrace(); } catch (UnsupportedFlavorException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } return super.importData(comp, t); } public boolean canImport(JComponent comp, DataFlavor flavor[]) { if (!(comp instanceof JLabel)) { return false; } for (int i=0; i<flavor.length; ++i) { for (int j=0; j<STANDARD_FLAVORS.length; ++j) { if (flavor[i].equals(STANDARD_FLAVORS[j])) { return true; } } } System.out.println("[LabelSelection] <canImport> returning false"); return false; } }