文档

Java™教程
隐藏目录
使用和创建DataFlavor
路径: 使用Swing创建GUI
课程: 拖放和数据传输

使用和创建DataFlavor

DataFlavor类允许您指定数据的内容类型。在从importData方法获取数据时,您需要指定一个DataFlavor。有几种预定义的类型可以供您使用:

对于大多数应用程序,这就是关于数据类型的全部知识。然而,如果您需要除这些预定义类型之外的类型,可以创建自己的类型。如果您创建了一个自定义组件并希望它参与数据传输,您将需要创建一个自定义的数据类型。指定数据类型的构造函数是DataFlavor(Class, String)。例如,要为java.util.ArrayList类创建一个数据类型:

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

要为整数数组创建一个数据类型:

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

使用此机制传输数据使用的是Object序列化,因此您用于传输数据的类必须实现Serializable接口,以及与其一起序列化的任何内容。如果一切都不可序列化,您将在放置或复制到剪贴板时看到一个NotSerializableException

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

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

要创建一个仅在应用程序内部使用的 ArrayList 数据类型的数据 flavor:

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

要创建一个整数数组的数据 flavor:

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

包含特殊字符的 MIME 类型,例如 [;,必须将这些字符用引号括起来。

Transferable 可以实现支持多种数据 flavor。例如,您可以同时使用本地和序列化 flavor,或者同时使用两种形式的相同数据,例如 ArrayList 和整数数组 flavor,或者创建一个接受不同类型数据(例如颜色和文本)的 TransferHandler

在从 TransferablegetTransferDataFlavors 方法返回的 DataFlavors 数组中,应按照首选顺序插入 flavor,其中最首选的 flavor 应该出现在数组的第一个元素。通常,首选顺序是从最丰富(或最复杂)的数据形式到简单集合的形式,即其他对象最可能理解的形式。


上一页: 非文本组件中的CCP
下一页: 将所有内容放在一起 - DnD和CCP