11.9.1 数据传递的类和接口
AWT
中剪贴板相关操作的接口和类被放在java.awt.datatransfer
包下,下面是该包下重要的接口和类的相关说明。
Clipboard
:代表一个剪贴板实例,这个剪贴板既可以是系统剪贴板,也可以是本地剪贴板。ClipboardOwner
:剪贴板内容的所有者接口,当剪贴板内容的所有权被修改时,系统将会触发该所有者的lostOwnership
事件处理器。Transferable
:该接口的实例代表放进剪贴板中的传输对象。DataFlavor
:用于表述剪贴板中的数据格式。StringSelection
:Transferable
的实现类,用于传输文本字符串。FlavorListener
:数据格式监听器接口。FlavorEvent
:该类的实例封装了数据格式改变的事件。
11.9.2 传递文本
传递文本是最简单的情形,因为AWT
已经提供了一个StringSelection
用于传输文本字符串。
将文本放入剪贴板
将一段文本内容(字符串对象)放进剪贴板中的步骤如下。
创建一个Clipboard实例
既可以创建系统剪贴板,也可以创建本地剪贴板。
创建系统剪贴板通过如下代码:
1 | Clipboard clipboard= Toolkit.getDefaultToolkit().getSystemClipboard(); |
创建本地剪贴板通过如下代码:
1 | Clipboard clipboard =new Clipboard("cb"); |
将需要放入剪贴板中的字符串封装成StringSelection对象
如下代码所示:
1 | StringSelection st =new StringSelection(targetStr); |
调用setContents方法
调用剪贴板对象的setContents()方法将StringSelection放进剪贴板中,该方法需要两个参数,
- 第一个参数是
Transferable
对象,代表放进剪贴板中的对象; - 第二个参数是
ClipboardOwner
对象,代表剪贴板数据的所有者,通常无须关心剪贴板数据的所有者,所以把第二个参数设为null
。
1 | clipboard.setContents(st,null); |
从剪贴板中取出数据
从剪贴板中取出数据则比较简单,调用Clipboard
对象的getData
(DataFlavorflavor
)方法即可取出剪贴板中指定格式的内容,如果指定flavor
的数据不存在,该方法将引发UnsupportedFlavorException
异常。为了避免出现异常,可以先调用Clipboard
对象的isDataFlavorAvailable(DataFlavorflavor)
来判断指定flavor
的数据是否存在。如下代码所示:
1 | if (clipboard. isDataFlavorAvailable(DataFlavor.stringFlavor)) |
实例
下面程序是一个利用系统剪贴板进行复制、粘贴的简单程序。
1 | import java.awt.*; |
上面程序中“复制”按钮的事件监听器负责将第一个文本域的内容复制到系统剪贴板中,“粘贴”按钮的事件监听器则负责取出系统剪贴板中的stringFlavor
内容,并将其添加到第二个文本域内。运行上面程序,将看到如图11.32所示的结果。
因为程序使用的是系统剪贴板,因此可以通过Windows
的剪贴簿查看器来查看程序放入剪贴板中的内容。在Windows
的“开始”菜单中运行“clipbrd
”程序,将可以看到如图11.33所示的窗口。
提示:Windows7
系统已经删除了默认的剪贴板查看器,因此读者可以到WindowsXP
的C:\windows\system32\
目录下将clipbrd.exe
文件复制过来。
原文链接: 11.9.1 数据传递的类和接口