java AWT 剪贴板Clipboard

来源:互联网 发布:js append 编辑:程序博客网 时间:2024/06/13 08:44

AWT 支持两种剪贴板:本地剪贴板和系统剪贴板。如果在同一个虚拟机的不同窗口之间进行数据传递,则使用AWT自已的本地剪贴板即可。如果需要在不同的虚拟机之间传递数据,或者要在java程序与第三方程序之间传递数据,就需要使用系统剪贴板了。

数据传递的类和接口:

AWT中剪贴板相关操作的接口和类放在java.awt.datatransfer包下。Clipboard:代表一个剪贴板实例,系统剪贴板 或 本地剪贴板。ClipboardOwner:剪贴板内容的所有者接口,当剪贴板内容的所有权被修改    时,系统会触发该所有者的lostOwnership事件处理器。Transferable:该接口的实例代表放进剪贴板中的传输对象。DataFlavoer:用于表述剪贴板中的数据格式。StringSelection:Tranferable的实现类,用于传输文本字符串。FlavoerListener:数据格式监听器接口。FlavoerEvent:该类的实例封装了数据格式改变的事件。    

传递文本:

1.创建一个Clipboard实例,系统剪贴板 或 本地剪贴板。
创建系统剪贴板代码:
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
创建本地剪贴板代码:
Clipboard clipboard = new Clipboard(“cb”);
2.将需要放入剪贴板中的字符串封装成StringSelection对象:
StringSelection st = new StringSelection(targetStr);
3.调用剪贴板对象的setContents()方法将StringSelection放进剪贴板中,该方法需要两个参数,第一个是Transferable对象,代表放进剪贴板中的对象。第二个参数是ClipboardOwner对象,代表剪贴板数据的所有者,通常我们无须关心剪贴板数据的所有者,所以可以所第二个参数设为null.
clipboard.setContents(st, null);

从剪贴板中取出数据:

调用Clipboard对象的getData(DataFlavor flavor)方法即可取出剪贴板中指定格式的内容,如果指定flavor的数据不存在,该方法将引发UnsupportedFlavorException异常。为避免出现异常,可以先调用Clipboard对象的isDataFlavorAvaliable(DataFlavor flavor)来判断指定的数据是否存在:
if (clipboard.isDataFlavorAvaliable(DataFlavor.stringFlavor)) {
String content = (String)clipable.getData(DataFlavor.stringFlavor);
}

系统剪贴板进行复制,粘贴实例:

package javaAWT;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.Panel;import java.awt.TextArea;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.UnsupportedFlavorException;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.IOException;import javax.swing.Box;import javax.swing.BoxLayout;public class SimpleClipboard {    private Frame frame = new Frame("SimpleClipboard");    // 获取系统剪切板    private Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();    // 创建本地剪切板    //Clipboard clipboard2 = new Clipboard("cb");    // 用于复制文本的文本框     private TextArea jtaCopyTo = new TextArea(5, 20);    // 用于粘贴文本的文本框     private TextArea jtaPaste = new TextArea(5, 20);    private Button btnCopy = new Button("Copy");    private Button btnPaste = new Button("Paste");    public void init() {        Panel panel = new Panel();        panel.add(btnCopy);        panel.add(btnPaste);        btnCopy.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                // TODO Auto-generated method stub                // 将一个多行文本域里的字符串封装成StringSelection对象                StringSelection contents = new StringSelection(jtaCopyTo.getText());                // 将StringSelection对象入放剪切板中                clipboard.setContents(contents, null);            }        });        btnPaste.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                // TODO Auto-generated method stub                // 如果剪切板包含stringFlavor内容                if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) {                    String content;                    try {                        content = (String)clipboard.getData(DataFlavor.stringFlavor);                        jtaPaste.append(content);                    } catch (UnsupportedFlavorException e1) {                        // TODO Auto-generated catch block                        e1.printStackTrace();                    } catch (IOException e1) {                        // TODO Auto-generated catch block                        e1.printStackTrace();                    }                }            }        });        frame.addWindowListener(new WindowAdapter() {            @Override            public void windowClosing(WindowEvent e) {                // TODO Auto-generated method stub                super.windowClosing(e);                System.exit(0);            }        });        // 创建一个水平排列的Box容器        Box box = new Box(BoxLayout.X_AXIS);        // 将两个多行文本域放在box容器中        box.add(jtaCopyTo);        box.add(jtaPaste);        // 将按钮的在的Panel , Box容器添加到Frame窗口中        frame.add(panel, BorderLayout.SOUTH);        frame.add(box, BorderLayout.CENTER);        frame.pack();        frame.setVisible(true);    }    public static void main(String[] args) {        new SimpleClipboard().init();    }}

这里写图片描述