TransferableColor.java Source code

Java tutorial

Introduction

Here is the source code for TransferableColor.java

Source

/*
 * This example is from the book "Java Foundation Classes in a Nutshell".
 * Written by David Flanagan. Copyright (c) 1999 by O'Reilly & Associates.  
 * You may distribute this source code for non-commercial purposes only.
 * You may study, modify, and use this example for any purpose, as long as
 * this notice is retained.  Note that this example is provided "as is",
 * WITHOUT WARRANTY of any kind either expressed or implied.
 */

import java.awt.Color;
import java.awt.datatransfer.*;
import java.io.*;

/**
 * This class is used to transfer a Color object via cut-and-paste or
 * drag-and-drop.  It allows a color to be transfered as a Color object,
 * or as a string. Due to a long-standing bug in Java 1.1 and Java 2, 
 * transferring a color as a string to native Windows applications will
 * not work.
 */
public class TransferableColor implements Transferable {
    // This DataFlavor object is used when we transfer Color objects directly
    protected static DataFlavor colorFlavor = new DataFlavor(Color.class, "Java Color Object");

    // These are the data flavors we support.
    protected static DataFlavor[] supportedFlavors = { colorFlavor, // Transfer as a Color object
            DataFlavor.stringFlavor, // Transfer as a String object
            DataFlavor.plainTextFlavor, // Transfer as a stream of unicode text
    };

    Color color; // The color we encapsulate and transfer

    /** Create a new TransferableColor that encapsulates the specified color */
    public TransferableColor(Color color) {
        this.color = color;
    }

    /** Return a list of DataFlavors we can support */
    public DataFlavor[] getTransferDataFlavors() {
        return supportedFlavors;
    }

    /** Check whether a specified DataFlavor is available */
    public boolean isDataFlavorSupported(DataFlavor flavor) {
        if (flavor.equals(colorFlavor) || flavor.equals(DataFlavor.stringFlavor)
                || flavor.equals(DataFlavor.plainTextFlavor))
            return true;
        return false;
    }

    /** 
     * Transfer the data.  Given a specified DataFlavor, return an Object
     * appropriate for that flavor.  Throw UnsupportedFlavorException if we
     * don't support the requested flavor.
     */
    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
        if (flavor.equals(colorFlavor))
            return color;
        else if (flavor.equals(DataFlavor.stringFlavor))
            return color.toString();
        else if (flavor.equals(DataFlavor.plainTextFlavor))
            return new ByteArrayInputStream(color.toString().getBytes("Unicode"));
        else
            throw new UnsupportedFlavorException(flavor);
    }
}