Accueil > Java > [DnD] LabelSelection class

[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;
    }
}

Java

Les commentaires sont fermés.