java 剪贴板_Java利用剪贴板实现交换程序间数据的方法

这篇文章主要介绍了Java利用剪贴板实现交换程序间数据的方法,需要的朋友可以参考下

本文实例讲述了Java利用剪贴板交换程序间数据的实现方法。在图形化系统中,系统剪贴板非常重要,很难想象一个没有剪贴板功能的图形化操作系统使用起来会是怎样。本例就实现了Java 程序与所在系统的剪贴板的数据交流,当单击“Paste”按钮后,Java 程序从系统剪贴板中取得数据并显示在一个JTextArea 组件中;当单击“Copy”按钮后,文本区中的选中文本将被传送到系统剪贴板上。

首先必须得到系统剪贴板的实例引用,java.awt.Toolkit 类中提供了getSystemClipboard()方法来返回一个Clipboard 实例;并且由于Toolkit 类提供了静态方法getDefaultToolkit()返回一个Toolkit实例,因此也不必new 一个Toolkit 对象,具体实现代码如下:

Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();

此处Clipboard 类提供了getContents()和setContents()方法来实现数据交换。

Transferable getContents(Object requester);

Void setContents(Transferable contents, ClipboardOwner owner);

此处的getContents()方法从系统剪贴板中获得一个Transferable 对象,参数requester 表示数据申请者,一般用this 就行了,表示要求数据的是本类的实例对象。如果要求的数据是文本,可以调用Transferable对象的getTransferData(DataFlavor.stringFlavor)得到,实现代码如下:

Transferable tr = cb.getContents(this);

String s = (String) tr.getTransferData(DataFlavor.stringFlavor);

setContents()方法从程序中传数据到系统剪贴板,参数contents 表示数据,参数owner 表示剪贴板的拥有者。

StringSelection ss = new StringSelection(this.jTextArea1.getText());

cb.setContents(ss,ss);

上面语句中的StringSelection 类表示选中的文本。

从上面的分析,实际上系统剪贴板中存放的是Transferable对象集合,程序和系统剪贴板的数据交换就是Transferable 对象的传递。程序代码:

1.新建一个Project,取名为JClipDemo。

2.新建一个Application,取名为JClipDemo;主窗口名取名为MainFrame,标题为JClipDemo。

3.在MainFrame 类的设计窗口中添加一个JTextArea 组件、两个JButton 和一个JPanel 组件,并且两个JButton 组件放在JPanel 组件上。添加新的属性Clipboard cb。具体代码如下:

public class MainFrame extends JFrame {

private JPanel contentPane;

private BorderLayout borderLayout1 = new BorderLayout();

//创建新的组件

private JTextArea jTextArea1 = new JTextArea();

private JPanel jPanel1 = new JPanel();

private JButton jButton1 = new JButton();

private JButton jButton2 = new JButton();

//剪贴板实例

Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();

……

}

4.编写MainFrame 类的初始化方法jbInit(),完成各组件的初始属性设置,并为按钮组件添加事件监听器,具体代码如下:

private void jbInit() throws Exception {

//setIconImage(Toolkit.getDefaultToolkit().createImage(MainFrame.class.getResource("[Your Icon]")));

contentPane = (JPanel) this.getContentPane();

contentPane.setLayout(borderLayout1);

this.setSize(new Dimension(396, 203));

this.setTitle("JClipboardDemo");

jButton1.setFont(new java.awt.Font("Dialog", 0, 14));

jButton1.setText("Copy");

jButton1.addActionListener(new java.awt.event.ActionListener() { //添加事件监听器

public void actionPerformed(ActionEvent e) {

jButton1_actionPerformed(e);

}

});

jButton2.setFont(new java.awt.Font("Dialog", 0, 14));

jButton2.setText("Paste");

jButton2.addActionListener(new java.awt.event.ActionListener() {//添加事件监听器

public void actionPerformed(ActionEvent e) {

jButton2_actionPerformed(e);

}

});

contentPane.add(jTextArea1, BorderLayout.CENTER);

contentPane.add(jPanel1, BorderLayout.SOUTH);

jPanel1.add(jButton1, null);

jPanel1.add(jButton2, null);

}

5.编写“Copy”按钮的事件处理方法,向系统剪贴板发送数据。

void jButton1_actionPerformed(ActionEvent e) {

StringSelection ss = new StringSelection(this.jTextArea1.getText()); //发送选中文本到系统剪贴板

cb.setContents(ss,ss);

}

6.编写“Paste”按钮的事件处理方法,从系统剪贴板获得数据。

void jButton2_actionPerformed(ActionEvent e) {

try{

Transferable tr = cb.getContents(this); //从系统剪贴板得到一个Transferable 对象

if (tr != null){

String s = (String) tr.getTransferData(DataFlavor.stringFlavor); //从Transferable 对象中得到文本数据

if (s!=null)

this.jTextArea1.insert(s,this.jTextArea1.getCaretPosition()); //在JTextArea 组件中的光标所在处插入文本

}

}catch(Exception err){

err.printStackTrace();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值