众所周知,这个包主要是与系统剪切板相关的的软件包(还有就是与JFC里的拖曳编程相关),这个包的核心类当然是Clipborad类(个人认为),这个类我们就看成是一个剪切板,它具有储存的内容,我们可以取得和设置它的内容.它的内容被封装在Transferable里,我们最终要取得的数据,就是在它里面.说到Transferable接口,我不得不提一下StringSelection类,这个类就是它的一个实现,专门用来向剪切板传输文本数据的.为什么要叫StringSelection,我想因为平时我们把文本复制到剪切板的时候,这些文本都是被选择好的,所以就会取个这个类名吧.呵呵~~~当我们用StringSelection向Clipborad传输文本数据的时候,我们剪切板的Transferable数据就可以是一个StringSelection对象.像这样:

StringSelection ss=new StringSelection(“放入剪切板的文本”);

clipboardobj.setContents(ss,ss);//两个参数都是ss,因为StringSelection既是Transferable,也是ClipboardOwner.

DataFlavor表示的是存储数据的格式,因为我们的剪切板里到底是文本,图像,还是上次复制的文件我们根本不知道,幸好有它让我们可以先知道Clipboard里存的是些什么东西.

一个剪切板还可以加入数据改变的监听器,当剪切板的数据改变时做一些操作.这主要是在Clipboard里加入监听即可.

下面是一个复制文本到剪切板的程序段: import javax.swing.*;

import java.awt.*;

import java.awt.datatransfer.*;

import java.io.IOException;

public class Clip{

public static void main(String[] args)

{

JFrame jf=new JFrame();

jf.setSize(400,400);

jf.setDefaultCloseOperation(3);

JTextArea jta=new JTextArea();

jf.getContentPane().add(jta); Clipboard cb=Toolkit.getDefaultToolkit().getSystemClipboard();

///存储到剪切板

StringSelection ss=new StringSelection(“哈哈哈哈哈哈”);

cb.setContents(ss, ss);

//从剪切板中取出

DataFlavor df=DataFlavor.stringFlavor;

Transferable tt=cb.getContents(df);

try {

System.out.println(tt.getTransferData(df));

} catch (UnsupportedFlavorException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//

jf.setVisible(true);

}

}

当然,剪切板里可以存入任何一个程序里运行的java类,序列化的类等.我们可以用这个好处在同时运行的java应用程序之间传递复制粘贴对象,像系列化类一样,不过只能在java应用程序里传递,在其它程序里就无法粘贴它们了.


版权声明:本文为hoverlees原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/hoverlees/article/details/1654860