使用和创建 DataFlavor

原文: https://docs.oracle.com/javase/tutorial/uiswing/dnd/dataflavor.html

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

  • imageFlavor 表示java.awt.Image格式的数据。拖动图像数据时使用此选项。
  • stringFlavor 表示最基本的文本形式的数据 - java.lang.String。对于大多数应用程序来说,这是最常用的数据风格。
  • javaFileListFlavorjava.util.List格式表示java.io.File对象。这对于拖动文件的应用程序非常有用,例如顶级掉落课程中讨论的TopLevelTransferHandler示例。

对于大多数应用程序,您只需了解数据风格即可。但是,如果您需要除这些预定义类型之外的其他类型,则可以创建自己的类型。如果您创建自定义组件并希望它参与数据传输,则需要创建自定义数据类型。用于指定数据 flavor 的构造器是 DataFlavor(Class, String) 。例如,要为java.util.ArrayList类创建数据 flavor:

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

要为整数数组创建数据 flavor:

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

使用此机制传输数据使用Object序列化,因此用于传输数据的类必须实现Serializable接口,因为必须使用它进行序列化。如果一切都不可序列化,您将在删除或复制到剪贴板期间看到NotSerializableException

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

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

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

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

要为整数数组创建数据 flavor:

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

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

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

当您创建从TransferablegetTransferDataFlavors 方法返回的DataFlavors数组时,应按首选顺序插入样式,最优选出现在数组的元素 0 处。通常,首选顺序是从最丰富或最复杂的数据形式到简单集 - 最容易被其他对象理解的形式。