# 出口方式

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

我们将检查的第一组方法用于从组件导出数据。当有问题的组件是操作源时，将为拖动手势或剪切/复制操作调用这些方法。用于导出数据的`TransferHandler`方法是：

*   [`getSourceActions(JComponent)`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.html#getSourceActions-javax.swing.JComponent-) - 此方法用于查询源组件支持的操作，例如`COPY`，`MOVE`或`LINK`，可以任意组合。例如，客户列表可能不支持将客户名称移出列表，但很可能支持复制客户名称。我们的大多数例子都支持`COPY`和`MOVE`。
*   [`createTransferable(JComponent)`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.html#createTransferable-javax.swing.JComponent-) - 此方法将要导出的数据捆绑到 [`Transferable`](https://docs.oracle.com/javase/8/docs/api/java/awt/datatransfer/Transferable.html) 对象中以准备传输。
*   [`exportDone(JComponent, Transferable, int)`](https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.html#exportDone-javax.swing.JComponent-java.awt.datatransfer.Transferable-int-) - 导出完成后调用此方法。当操作是`MOVE`时，传输完成后需要从源中删除数据 - 此方法是进行任何必要清理的地方。

## 样本导出方法

以下是导出方法的一些示例实现：

```
int getSourceActions(JComponent c) {
    return COPY_OR_MOVE;
}

Transferable createTransferable(JComponent c) {
    return new StringSelection(c.getSelection());
}

void exportDone(JComponent c, Transferable t, int action) {
    if (action == MOVE) {
        c.removeSelection();
    }
}

```

接下来我们将看一下数据导入所需的`TransferHandler`方法。