使用和创建 DataFlavor

DataFlavor类允许您指定数据的 Content Type。从importData方法中获取数据时,您需要指定DataFlavor。预定义了几种风味类型:

  • imageFlavor表示java.awt.Image格式的数据。拖动图像数据时使用。

  • stringFlavor以最基本的文本形式java.lang.String表示数据。这是大多数应用程序中最常用的数据形式。

  • javaFileListFlavorjava.util.List格式表示java.io.File个对象。这对于拖动文件的应用程序很有用,例如Top-Level Drop类中讨论的TopLevelTransferHandler示例。

对于大多数应用程序,这就是您需要了解的有关数据类型的全部信息。但是,如果您需要除这些 预定义类型以外的其他风味,则可以创建自己的风味。如果创建自定义组件并希望其参与数据传输,则需要创建自定义数据样式。用于指定数据风格的构造函数为DataFlavor(Class, String)。例如,为java.util.ArrayList类创建数据风味:

new DataFlavor(ArrayList.class, "ArrayList");

为整数数组创建数据形式:

new DataFlavor(int[].class, "Integer Array");

使用此机制传输数据使用Object序列化,因此用于传输数据的类必须实现Serializableinterface,以及与之进行序列化的任何东西。如果所有内容都不可序列化,则在拖放或复制到剪贴板时会看到NotSerializableException

使用DataFlavor(Class, String)构造函数创建数据样式可以使您在应用程序(包括本机应用程序)之间传输数据。如果要创建仅在应用程序内传输数据的数据类型,请使用javaJVMLocalObjectMimeTypeDataFlavor(String)构造函数。例如,要指定仅从应用程序中的JColorChooser转移颜色的数据形式,可以使用以下代码:

String colorType = DataFlavor.javaJVMLocalObjectMimeType +
                   ";class=java.awt.Color";
DataFlavor colorFlavor = new DataFlavor(colorType);

为仅在您的应用程序中起作用的ArrayList创建数据风格:

new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType +
               ";class=java.util.ArrayList");

为整数数组创建数据形式:

new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType +
               ";class=\"" + int[].class.getName() + "\"");

包含特殊字符(例如 [; )的 MIME 类型必须将这些字符括在引号中。

Transferable可以实现为支持多种口味。例如,您可以同时使用本地和序列化形式,也可以同时使用两种形式的同一数据,例如ArrayList和整数数组形式,或者可以创建TransferHandler来接受不同类型的数据,例如颜色和 Literals。

当您创建要从TransferablegetTransferDataFlavors方法返回的DataFlavors数组时,应按照偏好的 Sequences 插入风味,最喜欢的风味应出现在数组的元素 0 中。通常,首选 Sequences 是从最丰富或最复杂的数据形式到简单集(其他对象最可能理解的形式)。