11.9 剪贴板 11.9.1 数据传递的类和接口
11.9 剪贴板
当进行复制、剪切、粘贴等Windows操作时,也许读者从未想过这些操作的实现过程。
复制 剪切 粘贴操作过程
实际上这是一个看似简单的过程:
- 复制、剪切把一个程序中的数据放置到剪贴板中,
- 而粘贴则读取剪贴板中的数据,并将该数据放入另一个程序中。
剪贴板的复制、剪切和粘贴的过程看似很简单,但实现起来则存在一些具体问题需要处理:假设从一个文字处理程序中复制文本,然后将这段文本复制到另一个文字处理程序中,肯定希望该文字能保持原来的风格,也就是说,剪贴板中必须保留文字原来的格式信息;如果只是将文字复制到纯文本域中,则可以无须包含文字原来的格式信息。除此之外,可能还希望将图像等其他对象复制到剪贴板中。为了处理这种复杂的剪贴板操作,数据提供者(复制、剪切内容的源程序)允许使用多种格式的剪贴板数据,而数据的使用者(粘贴内容的目标程序)则可以从多种格式中选择所需的格式。
AWT剪贴板
提示:
因为AWT
的实现依赖于底层运行平台的实现,因此AWT剪贴板在不同平台上所支持的传输的对象类型并不完全相同。其中Microsoft
、Macintosh
的剪贴板支持传输富格式文本、图像、纯文本等数据,而X Window
的剪贴板功能则比较有限,它仅仅支持纯文本的剪切和粘贴。读者可以通过查看JRE
的jre/lib/flavormap.properties
文件来了解该平台支持哪些类型的对象可以在Java
程序和系统剪贴板之间传递。
AWT剪贴板分类
AWT
支持两种剪贴板:本地剪贴板和系统剪贴板。
- 如果在同一个虚拟机的不同窗口之间进行数据传递,则使用
AWT
自己的本地剪贴板就可以了。本地剪贴板则与运行平台无关,可以传输任意格式的数据。 - 如果需要在不同的虚拟机之间传递数据,或者需要在
Java
程序与第三方程序之间传递数据,那就需要使用系统剪贴板了。
11.9.1 数据传递的类和接口
AWT
中剪贴板相关操作的接口和类被放在java.awt.datatransfer
包下,下面是该包下重要的接口和类的相关说明。
类或接口 | 描述 |
---|---|
Clipboard |
代表一个剪贴板实例,这个剪贴板既可以是系统剪贴板,也可以是本地剪贴板。 |
ClipboardOwner |
剪贴板内容的持有者接口,当剪贴板内容的所有权被修改时,系统将会触发该持有者的lostOwnership 事件处理器。 |
Transferable |
该接口的实例代表放进剪贴板中的传输对象。 |
StringSelection |
Transferable 的实现类,用于传输文本字符串。 |
DataFlavor |
用于表述剪贴板中的数据格式。 |
FlavorListener |
数据格式监听器接口。 |
FlavorEvent |
该类的实例封装了数据格式改变的事件。 |