11.9 剪贴板 11.9.1 数据传递的类和接口

11.9 剪贴板

当进行复制、剪切、粘贴等Windows操作时,也许读者从未想过这些操作的实现过程。

复制 剪切 粘贴操作过程

实际上这是一个看似简单的过程:

  • 复制、剪切把一个程序中的数据放置到剪贴板中,
  • 而粘贴则读取剪贴板中的数据,并将该数据放入另一个程序中。

剪贴板的复制、剪切和粘贴的过程看似很简单,但实现起来则存在一些具体问题需要处理:假设从一个文字处理程序中复制文本,然后将这段文本复制到另一个文字处理程序中,肯定希望该文字能保持原来的风格,也就是说,剪贴板中必须保留文字原来的格式信息;如果只是将文字复制到纯文本域中,则可以无须包含文字原来的格式信息。除此之外,可能还希望将图像等其他对象复制到剪贴板中。为了处理这种复杂的剪贴板操作,数据提供者(复制、剪切内容的源程序)允许使用多种格式的剪贴板数据,而数据的使用者(粘贴内容的目标程序)则可以从多种格式中选择所需的格式。

AWT剪贴板

提示:
因为AWT的实现依赖于底层运行平台的实现,因此**AWT剪贴板在不同平台上所支持的传输的对象类型并不完全相同**。其中MicrosoftMacintosh的剪贴板支持传输富格式文本、图像、纯文本等数据,而X Window的剪贴板功能则比较有限,它仅仅支持纯文本的剪切和粘贴。读者可以通过查看JREjre/lib/flavormap.properties文件来了解该平台支持哪些类型的对象可以在Java程序和系统剪贴板之间传递。

AWT剪贴板分类

AWT支持两种剪贴板:本地剪贴板和系统剪贴板

  • 如果在同一个虚拟机的不同窗口之间进行数据传递,则使用AWT自己的本地剪贴板就可以了。本地剪贴板则与运行平台无关,可以传输任意格式的数据。
  • 如果需要在不同的虚拟机之间传递数据,或者需要Java程序与第三方程序之间传递数据,那就需要使用系统剪贴板了。

11.9.1 数据传递的类和接口

AWT中剪贴板相关操作的接口和类被放在java.awt.datatransfer包下,下面是该包下重要的接口和类的相关说明。

类或接口 描述
Clipboard 代表一个剪贴板实例,这个剪贴板既可以是系统剪贴板,也可以是本地剪贴板。
ClipboardOwner 剪贴板内容的持有者接口,当剪贴板内容的所有权被修改时,系统将会触发该持有者的lostOwnership事件处理器。
Transferable 该接口的实例代表放进剪贴板中的传输对象
StringSelection Transferable的实现类,用于传输文本字符串
DataFlavor 用于表述剪贴板中的数据格式
FlavorListener 数据格式监听器接口。
FlavorEvent 该类的实例封装了数据格式改变的事件