# TransferHandler 类

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

数据传输机制的核心是 [`TransferHandler`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.html) 类。顾名思义，`TransferHandler`提供了一种简单的机制，用于与`JComponent`之间传输数据 - 所有细节都包含在此类及其支持类中。大多数组件都提供了默认的传输处理程序。您可以在任何组件上创建和安装自己的传输处理程序。

有三种方法用于在组件上使用`TransferHandler`：

*   [`setDragEnabled(boolean)`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JList.html#setDragEnabled-boolean-) - 打开拖动支持。 （默认值为 false。）此方法在支持拖动手势的每个组件上定义;该链接将您带到`JList`的文档。
*   [`setDropMode(DropMode)`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JList.html#setDropMode-javax.swing.DropMode-) - 配置确定丢弃位置的方式。该方法定义为`JList`，`JTable`和`JTree`;该链接将您带到`JList`的文档。
*   [`setTransferHandler(TransferHandler)`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html#setTransferHandler-javax.swing.TransferHandler-) - 用于插入自定义数据导入和导出。此方法在`JComponent`上定义，因此它由每个 Swing 组件继承。

如前所述，默认的 Swing 传输处理程序（例如文本组件和颜色选择器使用的处理程序）提供了对数据导入和导出最有用的支持。但是，默认情况下，列表，表和树不支持删除。这样做的原因是没有通用的方法来处理这些组件的丢弃。例如，放在`JTree`的特定节点上意味着什么？它是替换节点，在其下面插入还是作为该节点的子节点插入？此外，我们不知道树后面的模型类型 - 它可能不是可变的。

虽然 Swing 无法为这些组件提供默认实现，但是 drop 的框架就在那里。您只需提供管理实际数据导入的自定义`TransferHandler`。

* * *

**Note:** 

如果将自定义`TransferHandler`安装到 Swing 组件上，则会替换默认支持。例如，如果将`JTextField`的`TransferHandler`替换为仅处理颜色的`TransferHandler`，则将禁用其支持文本导入和导出的功能。

如果必须替换默认`TransferHandler` - 例如，处理文本的默认值 - 您将需要重新实现文本导入和导出功能。这不需要像 Swing 提供的那样广泛 - 它可以像支持`StringFlavor`数据风格一样简单，具体取决于您的应用程序的需求。

* * *

接下来，我们将展示实现数据导出所需的`TransferHandler`方法。