Java教程是为JDK 8编写的。本页面描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及其后续版本中更新的语言特性的摘要。
请参阅JDK发行说明,了解所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
TransferSupport
类有两个作用。顾名思义,它的第一个作用是支持传输过程,并提供了几个实用方法用于访问数据传输的详细信息。以下列表显示了可以用于从TransferHandler
获取信息的方法。其中有几个方法与拖放操作有关,将在设置拖放模式中讨论。
Component getComponent()
— 这个方法返回传输的目标组件。int getDropAction()
— 这个方法返回传输为drop时选择的操作(COPY
, MOVE
或 LINK
)。如果传输不是drop操作,该方法会抛出异常。int getUserDropAction()
— 这个方法返回用户选择的drop操作。例如,如果用户在拖拽操作期间同时按下Control和Shift键,表示一个ACTION_LINK
操作。有关用户drop操作的更多信息,请参见DropTargetDragEvent
的API。如果传输不是drop操作,该方法会抛出异常。int getSourceDropActions()
— 这个方法返回源组件支持的操作集合。如果传输不是drop操作,该方法会抛出异常。DataFlavor[] getDataFlavors()
— 这个方法返回组件支持的所有数据类型。例如,一个组件可能支持文件和文本,或者文本和颜色。如果传输不是drop操作,该方法会抛出异常。boolean isDataFlavorSupported(DataFlavor)
— 这个方法返回true如果指定的DataFlavor
被支持。 DataFlavor
表示所代表的数据类型,例如图像(imageFlavor
),字符串(stringFlavor
),文件列表(javaFileListFlavor
)等等。Transferable getTransferable()
— 这个方法返回传输的Transferable
数据。使用这些方法查询传输的信息比获取transferable并查询它要更高效,因此不建议使用该方法,除非您无法以其他方式获取信息。DropLocation getDropLocation()
— 这个方法返回组件中的drop位置。具有内置drop支持的组件,如列表、表格和树,重写此方法以返回更有用的数据。例如,对于JList
组件的此方法版本返回drop发生的列表索引。如果传输不是drop操作,该方法会抛出异常。现在你已经熟悉了TransferSupport
工具方法,让我们来看看示例canImport
和importData
方法:
public boolean canImport(TransferSupport supp) { // 检查是否支持String类型的数据 if (!supp.isDataFlavorSupported(stringFlavor)) { return false; } // 获取拖放位置 DropLocation loc = supp.getDropLocation(); // 返回是否接受该位置的拖放 return shouldAcceptDropLocation(loc); } public boolean importData(TransferSupport supp) { if (!canImport(supp)) { return false; } // 获取Transferable对象和其数据 Transferable t = supp.getTransferable(); String data = t.getTransferData(stringFlavor); // 获取拖放位置 DropLocation loc = supp.getDropLocation(); // 在该位置插入数据 insertAt(loc, data); return true; }
接下来,我们将看看如何为选定的组件设置拖放模式。