使用和创建 DataFlavor
DataFlavor类允许您指定数据的 Content Type。从importData
方法中获取数据时,您需要指定DataFlavor
。预定义了几种风味类型:
-
imageFlavor表示
java.awt.Image
格式的数据。拖动图像数据时使用。 -
stringFlavor以最基本的文本形式
java.lang.String
表示数据。这是大多数应用程序中最常用的数据形式。 -
javaFileListFlavor以
java.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
序列化,因此用于传输数据的类必须实现Serializable
interface,以及与之进行序列化的任何东西。如果所有内容都不可序列化,则在拖放或复制到剪贴板时会看到NotSerializableException
。
使用DataFlavor(Class, String)
构造函数创建数据样式可以使您在应用程序(包括本机应用程序)之间传输数据。如果要创建仅在应用程序内传输数据的数据类型,请使用javaJVMLocalObjectMimeType和DataFlavor(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。
当您创建要从Transferable
的getTransferDataFlavors方法返回的DataFlavors
数组时,应按照偏好的 Sequences 插入风味,最喜欢的风味应出现在数组的元素 0 中。通常,首选 Sequences 是从最丰富或最复杂的数据形式到简单集(其他对象最可能理解的形式)。