javaGUI学习32:AWT-剪贴板与数据传输

1、java.awt.datatransfer软件包

剪贴板与数据传输机制是由–组类及接口实现的,这些类及接口都位于java.awt . datatransfer软件包中。

类/接口名称功能
Clipboard类Transferable可以被复制到剪贴板或被从剪贴板取出
ClipboardOwner接口将数据复制到剪贴板类的接口
DataFlavor类Transferable支持的数据风格
StringSelection类封装文本的数据的Transferable
Transferable接口用于可放置到剪贴板的项目的接口
UnsuppotedFlavorSelection类当请求数据格式不属于支持格式时,将被Transferable抛出

数据传送与剪贴板操作机制的概念:

  • 首先,只有 ClipboardOwner可以向剪贴板中复制数据。
  • 当将数据复制到剪贴板后,ClipboardOwner即成为剪贴板数据的拥有者。而且,只有一种类型的数据可以复制到剪贴板或者从剪贴板中取出,即 Transferable对象。
  • Transferable对象不仅可以封装某种类型的数据,而且还可以按照一种或多种格式提供数据。例如,包含图像的Transferable数据可以按照两种格式提供数据—— java.awt . image实例的引用或像素数组。
2、Clipboard类

用户可通过Clipboard构造器创建一个局部剪贴板,也可以通过调用Toolkit .getSystemClipboard ()方法,获取系统剪贴板的引用。

void addFlavorListener(FlavorListener listener) //注册指定的 FlavorListener以从此剪贴板接收 FlavorEvent 。  
DataFlavor[] getAvailableDataFlavors() //返回一个 DataFlavor的数组,其中可以提供此剪贴板的当前内容。  
Transferable getContents(Object requestor) //返回表示剪贴板当前内容的可传输对象。  
Object getData(DataFlavor flavor) //返回一个对象,该对象表示指定的 DataFlavor中此剪贴板的当前内容。  
FlavorListener[] getFlavorListeners() //返回当前在 Clipboard上注册的所有 FlavorListener的数组。  
String getName() //返回此剪贴板对象的名称。  
boolean isDataFlavorAvailable(DataFlavor flavor) //返回是否可以在指定的 DataFlavor提供此剪贴板的当前内容。  
void removeFlavorListener(FlavorListener listener) //删除指定的 FlavorListener ,使其不再从此 Clipboard收到 FlavorEvent s。  
void setContents(Transferable contents, ClipboardOwner owner) //将剪贴板的当前内容设置为指定的可传输对象,并将指定的剪贴板所有者注册为新内容的所有者。  
2.1 将数据复制到剪贴板及从剪贴板取出数据

将数据复制到剪贴板的操作步骤为:

  • 实例化一个剪贴板或者获取某个已现的剪贴板的引用。
  • 将数据封装为Transferable对象(这可能需要通过扩展Transferable实现)。
  • 将数据复制到剪贴板,同时指定Transferable对象及剪贴板数据的拥有者。
//第一步
Clipboard clipboard = getToolkit().getSystemClipboard();
//第二步
StringSelection contents = new StringSelection(要封装的数据);
//第三步
clipboard.setContenets(contents,demo05.this);

从剪贴板取出数据的操作步骤为:

  • 获取包含你感兴趣的数据的剪贴板引用。

  • 可选步骤:判断剪贴板内容(一个Transferable对象)是否按照正确的格式提供。

  • 如果当前剪贴板上的Transferable对象按照用户可接受的格式提供数据,则请求Transferable对象按照指定格式产生需要的数据。

Transferable contents = clipboard.getContents(this);
String s = (String)contents.getTransferData(DataFlavor.stringFlavor);
2.2 ClipboardOwner类

基于本地可用的数据传送功能,剪贴板内容可能并不会直接拷贝到剪贴板中,而是直到需要从剪贴板中获取该数据时,才完成拷贝工作。这种方法称之为延迟数据模式( lazy datamode),它也正是ClipboardOwner接口存在的原因。

剪贴板拥有者是指将数据放置到剪贴板上的对象,它必须确保放置到剪贴板上的数据直至调用lostOwnership方法前一直可以访问。lostOwnership ()方法是ClipboardOwner接口中定义的唯一方法。当另外一个对象向剪贴板中放置数据时,将调用该方法。如果由于某些原因,剪贴板拥有者希望释放它放置到剪贴板上的数据的相关资源,则它应该首先调用 lostOwnership ()方法,然后再执行资源释放操作。在实际使用过程中,lostOwnership()方法一般总是被实现为空操作方法。

3、数据传输
3.1 数据格式

数据格式分为两个基本类别:java类与MIME(多功能Internet邮件扩展)类型描述。

用户可以通过指定代表数据格式的特定java类构造一个DataFlavor,也可以通过指定代表数据格式的字符串构造一个DataFlavor。

3.2 Transferable对象与数据格式

方法:

Object getTransferData(DataFlavor flavor) //返回表示要传输的数据的对象。  
DataFlavor[] getTransferDataFlavors() //返回DataFlavor对象的数组,指示可以提供数据的风格。  
boolean isDataFlavorSupported(DataFlavor flavor) //返回此对象是否支持指定的数据flavor。  

Transferable对象仅仅是一些数据块的封装体。既然指定类型的数据可以按照不同的格式打包,因此Transferable对象实际为数据块的封装体,它管理封装体中特定类型数据的格式设置。

3.3 StringSelection

java.awt . datatransfer软件包提供了能够封装文本的Transferable对象的代码实现:StringSelec-tion。StringSelection可按照如下两种格式之一显示其字符串: java .lang.String或者普通文本。

4、将图像复制到剪贴板

模仿StringSelection类,实现ClipboardOwner,Transferable接口,创建一个图像的数据格式 :

static {
    ImageFlavor = new DataFlavor(Class.forName("java.awt.Image"));
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值