- java.lang.Object
-
- javax.swing.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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static class
TransferHandler.DropLocation
表示应插入丢弃数据的位置。static class
TransferHandler.TransferSupport
该类封装了剪贴板的所有相关细节或拖放传输,还允许自定义拖放体验的方面。
-
Field Summary
Fields Modifier and Type Field 描述 static int
COPY
代表“复制”转移动作的int
。static int
COPY_OR_MOVE
表示“复制”或“移动”的源操作能力的int
。static int
LINK
代表“链接”转移动作的int
。static int
MOVE
一个int
代表一个“移动”转移动作。static int
NONE
一个int
表示转移动作。
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
TransferHandler()
子类的便利构造函数。TransferHandler(String property)
构造一个可以通过剪贴板或拖放操作将Java Bean属性从一个组件传输到另一个组件的传输处理程序。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 boolean
canImport(JComponent comp, DataFlavor[] transferFlavors)
指示组件是否将在实际尝试导入之前接受给定的一组数据风格的导入。boolean
canImport(TransferHandler.TransferSupport support)
这种方法在拖放操作期间重复调用,以允许开发人员配置属性并返回传输的可接受性; 返回值为true
,表示由现有的TransferSupport
(其中包含所有转移细节)表示的转移在当前时间是可接受的,并且值为false
拒绝转移。protected Transferable
createTransferable(JComponent c)
创建一个Transferable
作为数据传输的来源。void
exportAsDrag(JComponent comp, InputEvent e, int action)
导致启动Swing拖动支持。protected void
exportDone(JComponent source, Transferable data, int action)
数据导出后调用。void
exportToClipboard(JComponent comp, Clipboard clip, int action)
导致从给定组件转移到给定的剪贴板。static Action
getCopyAction()
返回执行复制操作到剪贴板的Action
。static Action
getCutAction()
返回一个Action
,对剪贴板执行剪切操作。Image
getDragImage()
返回拖动图像。Point
getDragImageOffset()
返回要拖动的图像的锚点偏移量。static Action
getPasteAction()
返回从剪贴板执行粘贴操作的Action
。int
getSourceActions(JComponent c)
返回源的支持类型; 任何按位或组合COPY
,MOVE
和LINK
。Icon
getVisualRepresentation(Transferable t)
返回一个建立传输外观的对象。boolean
importData(JComponent comp, Transferable t)
导致从剪贴板或DND丢弃操作传输到组件。boolean
importData(TransferHandler.TransferSupport support)
导致从剪贴板或拖放操作发生转移。void
setDragImage(Image img)
设置拖动图像参数。void
setDragImageOffset(Point p)
设置要拖动的图像的锚点偏移量。
-
-
-
字段详细信息
-
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_LINK
, Constant 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
。 执行时,该操作将通过调用importData
的ActionEvent
的JComponent
源和剪贴板内容在组件的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
- 最初要求的转移行动; 任一COPY
,MOVE
或LINK
; 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
- 请求转移行动; 这应该是一个值为COPY
或MOVE
; 所执行的操作是由getSourceActions提供的传输能力和所请求的操作的交集; 如果不支持请求的操作,交叉路口可能会导致NONE
的操作 - 异常
-
IllegalStateException
- 如果剪贴板当前不可用 - 另请参见:
-
Clipboard.setContents(Transferable, ClipboardOwner)
-
importData
public boolean importData(TransferHandler.TransferSupport support)
导致从剪贴板或拖放操作发生转移。 要导入的Transferable
和要转移的组件包含在TransferSupport
。虽然拖放实现在调用此方法之前调用
canImport
来确定传输的适用性,但是粘贴的实现不会。 因此,不能假设在调用该方法进行粘贴时可以接受转移。 建议明确提出canImport
来涵盖这种情况。注意:传递给此方法的
TransferSupport
对象仅对方法调用的持续时间有效。 该方法返回后可能包含什么值是未定义的。- 参数
-
support
- 包含传输细节的对象,不是null
。 - 结果
- 如果数据被插入到组件中,则为true,否则为false
- 异常
-
NullPointerException
- 如果support
是null
- 从以下版本开始:
- 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
的值拒绝转移。对于那些在拖放期间自动显示放置位置的组件,默认情况下接受传输,可以让他们显示放置位置。 这可以通过致电
setShowDropLocation
在setShowDropLocation
上TransferSupport
。默认情况下,当传输被接受时,所选择的放置操作是用户通过其拖动手势选择的放置操作。 开发人员可以重写此选择不同的动作,从支持的源动作,通过调用
setDropAction
上TransferSupport
。每次调用
canImport
,该TransferSupport
含有新鲜的状态。 因此,必须在每次调用时设置其上设置的任何属性。 一旦下降,canImport
被称为最后一次,然后调用importData
。 对设置的任何状态TransferSupport
是最后一次通话期间将可importData
。这种方法在内部不被调用以响应粘贴操作。 因此,建议
importData
实现在这种情况下显式调用此方法,并且该方法也准备返回粘贴操作的适用性。注意:传递给此方法的
TransferSupport
对象仅对方法调用的持续时间有效。 该方法返回后可能包含什么值是未定义的。- 参数
-
support
- 包含传输细节的对象,而不是null
。 - 结果
-
true
如果导入可以发生,否则为false
- 异常
-
NullPointerException
- 如果support
是null
- 从以下版本开始:
- 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)
返回源的支持类型; 任何按位或组合COPY
,MOVE
和LINK
。某些型号不可变,因此在这种情况下不应该公布
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
-
-