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();
}
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 数据
, 剪贴板
, 交换
程序间
java实现两个数交换、java利用aop实现日志、js实现复制到剪贴板、jq实现复制到剪贴板、微信实现复制到剪贴板,以便于您获取更多的相关知识。

时间: 2024-10-22 13:08:46

Java利用剪贴板实现交换程序间数据的方法_java的相关文章

java 结合jQuery实现跨域名获取数据的方法_java

一.什么是跨域? 由于浏览器出于安全的考虑,采取了同源策略的限制,使得jQuery无法直接跨域名互相操作对象或数据.例如:a.com 域名下的 a.html页面利用jQuery无法操作b.com 域名下b.html页面的对象或是数据, 并且默认情况下也不能操作test.a.com域名下的 test.html的 对象或是数据 .只要满足下面条件的jQuery都会视为跨域名: 1.主域相同,子域不同,如xxx.aaa.com和yyy.aaa.com 2.域名相同,端口不同,如xxx.aaa.com:

Java利用反射自动封装成实体对象的方法_java

本文实例讲述了Java利用反射自动封装成实体对象的方法.分享给大家供大家参考.具体分析如下: 利用此方法的时候需要传递的参数的名称,必须以行号结尾,去掉行号就是属性名称,比如页面传递name+rowNo,那么实体对象的属性名应该为name.代码如下 复制代码 代码如下: //获取页面数据,自动封装成bean对象 public List getObjectList(Class clazz,String[] rowNos) throws Exception{         List objList

java获取两个数组中不同数据的方法_java

本文实例讲述了java获取两个数组中不同数据的方法.分享给大家供大家参考.具体实现方法如下: public static <T> List<T> compare(T[] t1, T[] t2) { List<T> list1 = Arrays.asList(t1); List<T> list2 = new ArrayList<T>(); for (T t : t2) { if (!list1.contains(t)) { list2.add(t)

Java多线程编程之访问共享对象和数据的方法_java

多个线程访问共享对象和数据的方式有两种情况: 1.每个线程执行的代码相同,例如,卖票:多个窗口同时卖这100张票,这100张票需要多个线程共享. 2.每个线程执行的代码不同,例如:设计四个线程,其中两个线程每次对j增加1,另外两个线程每次对j减少1. a.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个对象中有共享数据.卖票就可以这样做,每个窗口都在做卖票任务,卖的票都是同一个数据(点击查看具体案例). b.如果每个线程执行的代码不同,就需要使用不同的Runnable对象,有

利用“监视窗口”快速查看Excel数据的方法

  利用"监视窗口"快速查看Excel数据的方法         (1)打开Excel工作簿,在"公式"选项卡的"公式审核"选项组中,单击[监视窗口]按钮,打开"监视窗口"任务窗格,如图1所示. 图1 打开"监视窗口"任务窗格 (2)在"监视窗口"任务窗格中,单击"任务窗格选项"下三角按钮,在下拉列表中可以执行[移动].[大小]和[关闭]命令,如图2所示.执行[移动]

从Java的jar文件中读取数据的方法_java

本文实例讲述了从Java的jar文件中读取数据的方法.分享给大家供大家参考.具体如下: Java 档案 (Java Archive, JAR) 文件是基于 Java 技术的打包方案.它们允许开发人员把所有相关的内容 (.class.图片.声音和支持文件等) 打包到一个单一的文件中.JAR 文件格式支持压缩.身份验证和版本,以及许多其它特性. 从 JAR 文件中得到它所包含的文件内容是件棘手的事情,但也不是不可以做到.这篇技巧就将告诉你如何从 JAR 文件中取得一个文件.我们会先取得这个 JAR

java 学习笔记(入门篇)_程序流程控制结构和方法_java

程序流程控制结构和方法 程序流程控制结构分为:顺序.选择.循环以及异常处理结构.语句是程序的基本组成单位.在java中分简单语句和符合语句,简单语句就是一行代码,例如,privateint3=3;复合语句就是一些简单语句的组合了,例如一个方法等等.一般来说语句的执行流程是按顺序来进行的,但是当遇到一些特殊的条件,比如循环,这时候语句就会按照流程控制结构来进行了. (1)选择结构 选择结构用于根据不同的条件,实现不同的操作,它提供了一种机制,使得程序根据相应的条件运行对应的语句.java言语实现选

利用java反射机制实现自动调用类的简单方法_java

1. 新建TestServlet类 package com.yanek.test; import java.io.IOException; import java.lang.reflect.Method; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.ht

java使用hashMap缓存保存数据的方法_java

本文实例讲述了java使用hashMap缓存保存数据的方法.分享给大家供大家参考,具体如下: private static final HashMap<Long, XXX> sCache = new HashMap<Long, XXX>(); private static int sId = -1; public static void initAlbumArtCache() { try { //... if (id != sId) { clearCache(); sId = id