# TransferSupport 类

> 原文： [https://docs.oracle.com/javase/tutorial/uiswing/dnd/transfersupport.html](https://docs.oracle.com/javase/tutorial/uiswing/dnd/transfersupport.html)

[`TransferSupport`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.TransferSupport.html) 类有两个功能。顾名思义，它的第一个功能是支持传输过程，为此目的，它提供了几种用于访问数据传输细节的实用方法。以下列表显示了可用于从`TransferHandler`获取信息的方法。其中一些方法与拖放动作有关，这将在[设置丢弃模式](dropmodes.html)中讨论。

*   [`Component getComponent()`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.TransferSupport.html#getComponent--) - 此方法返回传输的目标组件。
*   [`int getDropAction()`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.TransferSupport.html#getDropAction--) - 当传输是丢弃时，此方法返回所选操作（`COPY`，`MOVE`或`LINK`）。如果传输不是 drop，则此方法抛出异常。
*   [`int getUserDropAction()`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.TransferSupport.html#getUserDropAction--) - 此方法返回用户选择的放置操作。例如，如果用户在拖动手势期间同时保持 Control 和 Shift，则表示`ACTION_LINK`动作。有关用户删除操作的更多信息，请参阅 [`DropTargetDragEvent`](https://docs.oracle.com/javase/8/docs/api/java/awt/dnd/DropTargetDragEvent.html) 的 API。如果传输不是 drop，则此方法抛出异常。
*   [`int getSourceDropActions()`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.TransferSupport.html#getSourceDropActions--) - 此方法返回源组件支持的操作集。如果传输不是 drop，则此方法抛出异常。
*   [`DataFlavor[] getDataFlavors()`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.TransferSupport.html#getDataFlavors--) - 此方法返回此组件支持的所有数据风格。例如，组件可能支持文件和文本，或文本和颜色。如果传输不是 drop，则此方法抛出异常。
*   [`boolean isDataFlavorSupported(DataFlavor)`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.TransferSupport.html#isDataFlavorSupported-java.awt.datatransfer.DataFlavor-) - 如果支持指定的`DataFlavor`，则此方法返回 true。 [`DataFlavor`](https://docs.oracle.com/javase/8/docs/api/java/awt/datatransfer/DataFlavor.html) 表示所表示的数据类型，例如图像（`imageFlavor`），字符串（`stringFlavor`），文件列表（`javaFileListFlavor`）等。
*   [`Transferable getTransferable()`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.TransferSupport.html#getTransferable--) - 此方法返回此传输的`Transferable`数据。使用这些方法之一查询有关传输的信息比获取 transferable 和查询它更有效，因此不建议使用此方法，除非您无法以其他方式获取信息。
*   [`DropLocation getDropLocation()`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.TransferSupport.html#getDropLocation--) - 此方法返回组件中的放置位置。具有内置 drop 支持的组件（如 list，table 和 tree）会覆盖此方法以返回更多有用的数据。例如，`JList`组件的此方法的版本返回发生丢弃的列表中的索引。如果传输不是 drop，则此方法抛出异常。

## 示例导入方法

既然您熟悉`TransferSupport`实用程序方法，那么让我们看一下示例`canImport`和`importData`方法：

```
public boolean canImport(TransferSupport supp) {
    // Check for String flavor
    if (!supp.isDataFlavorSupported(stringFlavor)) {
        return false;
    }

    // Fetch the drop location
    DropLocation loc = supp.getDropLocation();

    // Return whether we accept the location
    return shouldAcceptDropLocation(loc);
}

public boolean importData(TransferSupport supp) {
    if (!canImport(sup)) {
        return false;
    }

    // Fetch the Transferable and its data
    Transferable t = supp.getTransferable();
    String data = t.getTransferData(stringFlavor);

    // Fetch the drop location
    DropLocation loc = supp.getDropLocation();

    // Insert the data at this location
    insertAt(loc, data);

    return true;
}

```

接下来，我们将介绍如何为所选组件设置放置模式。