使用和创建 DataFlavor
原文: https://docs.oracle.com/javase/tutorial/uiswing/dnd/dataflavor.html
DataFlavor
类允许您指定数据的内容类型。从importData
方法获取数据时,需要指定DataFlavor
。为您预定义了几种风味类型:
imageFlavor
表示java.awt.Image
格式的数据。拖动图像数据时使用此选项。stringFlavor
表示最基本的文本形式的数据 -java.lang.String
。对于大多数应用程序来说,这是最常用的数据风格。javaFileListFlavor
以java.util.List
格式表示java.io.File
对象。这对于拖动文件的应用程序非常有用,例如顶级掉落课程中讨论的TopLevelTransferHandler
示例。
对于大多数应用程序,您只需了解数据风格即可。但是,如果您需要除这些预定义类型之外的其他类型,则可以创建自己的类型。如果您创建自定义组件并希望它参与数据传输,则需要创建自定义数据类型。用于指定数据 flavor 的构造器是 DataFlavor(Class, String)
。例如,要为java.util.ArrayList
类创建数据 flavor:
new DataFlavor(ArrayList.class, "ArrayList");
要为整数数组创建数据 flavor:
new DataFlavor(int[].class, "Integer Array");
使用此机制传输数据使用Object
序列化,因此用于传输数据的类必须实现Serializable
接口,因为必须使用它进行序列化。如果一切都不可序列化,您将在删除或复制到剪贴板期间看到NotSerializableException
。
使用DataFlavor(Class, String)
构造器创建数据 flavor 可以在应用程序之间传输数据,包括本机应用程序。如果要创建仅在应用程序内传输数据的数据风格,请使用 javaJVMLocalObjectMimeType
和 DataFlavor(String)
构造器。例如,要指定仅在应用程序中从JColorChooser
传输颜色的数据 flavor,您可以使用以下代码:
String colorType = DataFlavor.javaJVMLocalObjectMimeType +
";class=java.awt.Color";
DataFlavor colorFlavor = new DataFlavor(colorType);
要为ArrayList
创建仅在您的应用程序中起作用的数据风格:
new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType +
";class=java.util.ArrayList");
要为整数数组创建数据 flavor:
new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType +
";class=\"" + int[].class.getName() + "\"");
包含特殊字符的 MIME 类型,例如 [或; ,必须将这些字符括在引号中。
可以实现Transferable
以支持多种口味。例如,您可以同时使用本地和序列化风格,或者您可以使用相同数据的两种形式,例如ArrayList
和整数数组风格,或者您可以创建接受不同类型的TransferHandler
数据,如颜色和文字。
当您创建从Transferable
的 getTransferDataFlavors
方法返回的DataFlavors
数组时,应按首选顺序插入样式,最优选出现在数组的元素 0 处。通常,首选顺序是从最丰富或最复杂的数据形式到简单集 - 最容易被其他对象理解的形式。