TransferSupport Class

TransferSupport类具有两个功能。顾名思义,其第一个功能是支持传输过程,为此,它提供了几种用于访问数据传输详细信息的实用方法。以下列表显示了可用于从TransferHandler获取信息的方法。这些方法中有几种与放置动作有关,将在设置放置 Pattern中讨论。

  • Component getComponent() —此方法返回传输的目标组件。

  • int getDropAction() —当转移是丢弃时,此方法返回所选的动作(COPYMOVELINK)。如果传输不是丢弃,则此方法将引发异常。

  • int getUserDropAction() —此方法返回用户选择的放置动作。例如,如果用户在拖动手势期间同时按住 Control 和 Shift,则表示ACTION_LINK动作。有关用户放置操作的更多信息,请参阅DropTargetDragEvent的 API。如果传输不是丢弃,则此方法将引发异常。

  • int getSourceDropActions() —此方法返回源组件支持的一组操作。如果传输不是丢弃,则此方法将引发异常。

  • DataFlavor[] getDataFlavors() —此方法返回此组件支持的所有数据类型。例如,一个组件可能支持文件和文本,或者文本和颜色。如果传输不是丢弃,则此方法将引发异常。

  • boolean isDataFlavorSupported(DataFlavor) —如果支持指定的DataFlavor,则此方法返回 true。 DataFlavor表示表示的数据类型,例如图像(imageFlavor),字符串(stringFlavor),文件列表(javaFileListFlavor)等。

  • Transferable getTransferable()-此方法返回此传输的Transferable数据。使用这些方法之一来查询有关传输的信息要比获取可传输的对象和查询更为有效,因此,除非您无法以其他方式获取信息,否则不建议使用此方法。

  • DropLocation getDropLocation() —此方法返回组件中的放置位置。具有内置放置支持的组件(例如列表,表和树)将覆盖此方法以返回更多有用的数据。例如,用于JList组件的此方法的版本返回发生删除的列表中的索引。如果传输不是丢弃,则此方法将引发异常。

samples 导入方法

现在您已熟悉TransferSupportUtil 方法,让我们看一下示例canImportimportData方法:

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;
}

接下来,我们看一下如何为所选组件设置放置 Pattern。