Module  java.desktop
软件包  javax.swing

Class TransferHandler

  • All Implemented Interfaces:
    Serializable


    public class TransferHandler
    extends Object
    implements Serializable
    该类用于处理从Swing组件传送Transferable Transferable用于表示通过剪切,复制或粘贴到剪贴板进行交换的数据。 它也用于拖放操作以表示从组件拖动,并将其拖放到组件。 Swing提供了自动支持使用此类实现提供的功能的剪切,复制和粘贴键盘绑定的功能。 Swing还提供了自动支持使用此类实现提供的功能的拖放功能。 Swing开发人员可以专注于通过在Swing组件上设置transferHandler属性来指定传输的语义。

    该类被实现为通过在构造函数中指定属性的名称来提供传递组件属性的默认行为。 例如,要通过剪贴板或拖放操作将前景颜色从一个组件传输到另一个组件,可以使用字符串“foreground”构建TransferHandler 内置的支持将使用由getForeground返回的颜色作为转移的来源,而setForeground用于传输的目标。

    有关详细信息,请参阅“Java教程”中的 How to Use Drag and Drop and Data Transfer ”一节。

    从以下版本开始:
    1.4
    另请参见:
    Serialized Form
    • 字段详细信息

      • NONE

        public static final int NONE
        一个 int表示转移动作。
        另请参见:
        Constant Field Values
      • COPY

        public static final int COPY
        代表“复制”转让行为的int 当数据复制到剪贴板或在拖放操作中复制到别处时,将使用此值。
        另请参见:
        Constant Field Values
      • MOVE

        public static final int MOVE
        代表“移动”转移动作的int 当数据移动到剪贴板(即剪切)或在拖放操作中移动到其他位置时,将使用此值。
        另请参见:
        Constant Field Values
      • COPY_OR_MOVE

        public static final int COPY_OR_MOVE
        表示“复制”或“移动”的源动作能力的 int
        另请参见:
        Constant Field Values
      • LINK

        public static final int LINK
        代表“链接”转移动作的int 该值用于指定数据应该在拖放操作中链接。
        从以下版本开始:
        1.6
        另请参见:
        DnDConstants.ACTION_LINKConstant Field Values
    • 构造方法详细信息

      • TransferHandler

        public TransferHandler​(String property)
        构造一个可以通过剪贴板或拖放操作将Java Bean属性从一个组件传输到另一个组件的传输处理程序。
        参数
        property - 要转让的财产的名称; 这可以是null如果没有与传输处理程序相关联的属性(例如执行某种其他类型的传输的子类)
      • TransferHandler

        protected TransferHandler​()
        子类的便利构造函数。
    • 方法详细信息

      • getCutAction

        public static Action getCutAction​()
        返回一个Action ,对剪贴板执行剪切操作。 当执行时,这个动作在操作JComponent所述的源ActionEvent通过调用exportToClipboard ,具有MOVE动作,对组件的TransferHandler
        结果
        一个 Action用于剪切到剪贴板
      • getCopyAction

        public static Action getCopyAction​()
        返回执行复制操作到剪贴板的Action 当执行时,这个动作在操作JComponent所述的源ActionEvent通过调用exportToClipboard ,具有COPY动作,对组件的TransferHandler
        结果
        一个 Action用于执行副本到剪贴板
      • getPasteAction

        public static Action getPasteAction​()
        返回从剪贴板执行粘贴操作的Action 执行时,该操作将通过调用importDataActionEventJComponent源和剪贴板内容在组件的TransferHandler
        结果
        一个用于从剪贴板执行粘贴的 Action
      • setDragImage

        public void setDragImage​(Image img)
        设置拖动图像参数。 该图像必须准备好在通话时刻渲染。 由于某些性能原因,图像由参考存储。
        参数
        img - 要拖动的图像
      • getDragImage

        public Image getDragImage​()
        返回拖动图像。 如果没有要拖动的图像,则返回值为null
        结果
        引用拖动图像
      • setDragImageOffset

        public void setDragImageOffset​(Point p)
        设置要拖动的图像的锚点偏移量。 它不能是null
        参数
        p - 对应于图像相对于图像的左上角的锚点偏移的坐标的 Point对象
      • getDragImageOffset

        public Point getDragImageOffset​()
        返回要拖动的图像的锚点偏移量。
        结果
        对应于图像相对于图像的左上角的锚点偏移的坐标的Point对象。 (0,0)默认返回。
      • exportAsDrag

        public void exportAsDrag​(JComponent comp,
                                 InputEvent e,
                                 int action)
        导致启动Swing拖动支持。 如果在组件上设置了dragEnabled属性, javax.swing.plaf.basic包中的各种UI实现调用。 这可以通过自定义UI实现来使用Swing拖动支持。 这个方法也可以被一个Swing扩展名称为JComponent的子类来JComponent ,以利用Swing的拖动支持。

        转移不一定在该呼叫返回时完成(即呼叫不阻止等待丢弃)。 转移将通过Swing实现java.awt.dnd机制进行,不需要开发人员进一步的努力。 传输完成后,将调用exportDone方法。

        参数
        comp - 保存要传输的数据的组件; 提供共享TransferHandler s
        e - 触发转移的事件
        action - 最初要求的转移行动; 任一COPYMOVELINK ; DnD系统可以改变在拖动操作过程中使用的动作
      • exportToClipboard

        public void exportToClipboard​(JComponent comp,
                                      Clipboard clip,
                                      int action)
                               throws IllegalStateException
        导致从给定组件转移到给定的剪贴板。 该方法由组件操作映射中注册的默认剪切和复制操作调用。

        转移将使用java.awt.datatransfer机制进行,不需要开发人员进一步的努力。 任何数据传输将完成,并且在此方法返回之前,将使用发生的操作调用exportDone方法。 如果尝试在其上放置数据时剪贴板不可用,则IllegalStateException抛出的IllegalStateException将通过此方法传播。 但是, exportDone将首先被调用与NONE的一致性的动作。

        参数
        comp - 保存要传输的数据的组件; 提供共享TransferHandler s
        clip - 将数据传输到的剪贴板
        action - 请求转移行动; 这应该是一个值为COPYMOVE ; 所执行的操作是由getSourceActions提供的传输能力和所请求的操作的交集; 如果不支持请求的操作,交叉路口可能会导致NONE的操作
        异常
        IllegalStateException - 如果剪贴板当前不可用
        另请参见:
        Clipboard.setContents(Transferable, ClipboardOwner)
      • importData

        public boolean importData​(TransferHandler.TransferSupport support)
        导致从剪贴板或拖放操作发生转移。 要导入的Transferable和要转移的组件包含在TransferSupport

        虽然拖放实现在调用此方法之前调用canImport来确定传输的适用性,但是粘贴的实现不会。 因此,不能假设在调用该方法进行粘贴时可以接受转移。 建议明确提出canImport来涵盖这种情况。

        注意:传递给此方法的TransferSupport对象仅对方法调用的持续时间有效。 该方法返回后可能包含什么值是未定义的。

        参数
        support - 包含传输细节的对象,不是 null
        结果
        如果数据被插入到组件中,则为true,否则为false
        异常
        NullPointerException - 如果 supportnull
        从以下版本开始:
        1.6
        另请参见:
        canImport(TransferHandler.TransferSupport)
      • importData

        public boolean importData​(JComponent comp,
                                  Transferable t)
        导致从剪贴板或DND丢弃操作传输到组件。 Transferable表示要导入到组件中的数据。

        注意:Swing现在调用了较新版本的importData ,它需要一个TransferSupport ,后者TransferSupport此方法(如果TransferSupport的组件是JComponent )。 鼓励开发人员调用并覆盖较新版本,因为它提供更多信息(并且是唯一支持使用TransferHandler直接在JFrame或其他非JComponent上使用的版本)。

        参数
        comp - 接收转移的组件; 提供共享TransferHandler s
        t - 要导入的数据
        结果
        如果数据被插入到组件中,则为true,否则为false
        另请参见:
        importData(TransferHandler.TransferSupport)
      • canImport

        public boolean canImport​(TransferHandler.TransferSupport support)
        这种方法在拖放操作期间重复调用,以允许开发人员配置属性并返回传输的可接受性; 返回值为true ,表示由现有时间可接受的TransferSupport (其中包含所有转移细节)所表示的转移, false的值拒绝转移。

        对于那些在拖放期间自动显示放置位置的组件,默认情况下接受传输,可以让他们显示放置位置。 这可以通过致电setShowDropLocationsetShowDropLocationTransferSupport

        默认情况下,当传输被接受时,所选择的放置操作是用户通过其拖动手势选择的放置操作。 开发人员可以重写此选择不同的动作,从支持的源动作,通过调用setDropActionTransferSupport

        每次调用canImport ,该TransferSupport含有新鲜的状态。 因此,必须在每次调用时设置其上设置的任何属性。 一旦下降, canImport被称为最后一次,然后调用importData 对设置的任何状态TransferSupport是最后一次通话期间将可importData

        这种方法在内部不被调用以响应粘贴操作。 因此,建议importData实现在这种情况下显式调用此方法,并且该方法也准备返回粘贴操作的适用性。

        注意:传递给此方法的TransferSupport对象仅对方法调用的持续时间有效。 该方法返回后可能包含什么值是未定义的。

        参数
        support - 包含传输细节的对象,而不是 null
        结果
        true如果导入可以发生,否则为 false
        异常
        NullPointerException - 如果 supportnull
        从以下版本开始:
        1.6
        另请参见:
        importData(TransferHandler.TransferSupport)TransferHandler.TransferSupport.setShowDropLocation(boolean)TransferHandler.TransferSupport.setDropAction(int)
      • canImport

        public boolean canImport​(JComponent comp,
                                 DataFlavor[] transferFlavors)
        指示组件是否将在实际尝试导入之前接受给定的一组数据风格的导入。

        注意:Swing现在调用了较新版本的canImport ,它需要一个TransferSupport ,而这又调用了这种方法(只有当TransferSupport的组件是JComponent )。 鼓励开发人员调用并覆盖较新版本,因为它提供了更多信息(并且是唯一支持使用TransferHandler直接在JFrame或其他非JComponent上使用的版本)。

        参数
        comp - 接收转移的组件; 提供共享TransferHandler s
        transferFlavors - 可用的数据格式
        结果
        如果数据可以插入到组件中,则为true,否则为false
        另请参见:
        canImport(TransferHandler.TransferSupport)
      • getSourceActions

        public int getSourceActions​(JComponent c)
        返回源的支持类型; 任何按位或组合COPYMOVELINK

        某些型号不可变,因此在这种情况下不应该公布MOVE的传输操作。 返回NONE禁用组件传输。

        参数
        c - 保存要传输的数据的组件; 提供共享TransferHandler s
        结果
        COPY如果传输属性可以找到,否则返回 NONE
      • getVisualRepresentation

        public Icon getVisualRepresentation​(Transferable t)
        返回一个建立传输外观的对象。 这对于在执行拖动操作时提供反馈并且在具有视觉外观的剪贴板实现中表示传送时是有用的。 Icon界面的实现不应该改变图形剪辑或alpha级别。 图标实现不需要是矩形或绘制所有的边界矩形和逻辑,调用图标paint方法不应该假定所有的位都被绘制。 null是此方法的有效返回值,表示没有提供视觉表示。 在这种情况下,调用逻辑可以自由地表示可转移的。

        如果返回值为null ,默认的Swing逻辑将不会进行Alpha混合拖动动画。

        参数
        t - 要传输的数据; 这个值预计是由createTransferable创建的
        结果
        null ,表示没有默认的视觉表示
      • createTransferable

        protected Transferable createTransferable​(JComponent c)
        创建一个Transferable作为数据传输的来源。 返回到要传送的数据的表示,或null如果组件的属性是null
        参数
        c - 保存要传输的数据的组件; 提供共享TransferHandler s
        结果
        要转让的数据的表示,或 null如果与 c相关联的属性是 null
      • exportDone

        protected void exportDone​(JComponent source,
                                  Transferable data,
                                  int action)
        数据导出后调用。 如果操作是MOVE ,该方法应该删除传输的数据。

        实现这种方法什么也不做,因为MOVE不是这个实现的支持的操作( getSourceActions不包括MOVE )。

        参数
        source - 作为数据源的组件
        data - 如果操作为 NONE ,则传输的数据或可能为空。
        action - the actual action that was performed