`

在Java中操作剪贴板中的内容

阅读更多
Java提供两种类型的剪贴板:系统的和本地的.
      本地剪贴板只在当前虚拟机中有效.Java允许多个本地剪贴板同时存在,可以方便地通过剪贴板的名称来进行存取访问.系统剪贴板与同等操作系统直接关连,允许应用程序与运行在该操作系统下的其它程序之间进行信息交换.

    在进一步深入之前,先看看与剪贴板相同的java类,这些类主要包含在java.awt.datatransfer包中,主要有以下几种:
Clipboard类: 处理任何可以被传递的对象.
ClipboardOwner接口: 任何处理剪贴板的类都必须实现该接口.该接口用于剪贴板中的原始数据被替换时发出通知.
Dataflavor类: 表现被传递的对象支持的所有数据类型.
StringSelection类: java支持的一种可被传递的类.
Transferable接口: 包装传递到剪贴板的对象.
UnsupportedFlavor Exception类: 由可传递对象抛出的异常,表示不对象的数据类型(data flavor)

Clipboard类
Clipboard是存取剪贴板的链接.它包含三个方法:
String getName()
void setContents(Transferable, ClipboardOwner)
Transferable getContent(Object)
访问系统剪贴板,可以瘵系统剪贴板的引用赋值给一个Clipboard对象,如:
Clipboard clipboard = getToolKit().getSystemClipboard();
创建一个本地剪贴板,可以通过传递剪贴板的名称到构造方法中:
Clipboard clipboard = new Clipboard("My first clipboard");

ClipboardOwner接口
ClipboardOwner唯一的功能就是当(剪贴板)拥有者的数据被其它类覆盖时通知它.同时它可以用用通知应用程序释放关联到数据的资源的信号.
在具体应用中,lostOwnership方法可以用于设置标志,该标志用于通知应用有关剪贴板中数据的可见性


java.awt.datatransfer.Clipboard clipboard=java.awt.Toolkit.getDefaultToolkit().getSystemClipboard(); //获得系统剪切板

//下面是我的记事本部分功能.e.getSource()是当触发了某个事件.这里是copy的代码,下面依此是粘贴,等代码.可以看你需要的部分.(关于clopboard的).都是汉语拼音命名的变良.

else if(e.getSource()==fuZhi||e.getSource()==fuZhi2)//////////Copy 'fuZhi' is 'Copy'
{
String temp=text.getSelectedText();
stringSelection=new StringSelection(temp);
clipboard.setContents(stringSelection,null);
}

else if(e.getSource()==jianQie||e.getSource()==jianQie2)//////////'jianQie' is 'Cut'
{
String temp=text.getSelectedText();
stringSelection=new StringSelection(temp);
clipboard.setContents(stringSelection,null);
int start=text.getSelectionStart();
int end=text.getSelectionEnd();
text.replaceRange("",start,end);
}
//这里是粘贴.主要是如何从系统剪切板里取得数据.
else if(e.getSource()==zhanTie||e.getSource()==zhanTie2)///////////////'zhanTie' is 'Paste'.
{
java.awt.datatransfer.Transferable transferable=clipboard.getContents(this);
java.awt.datatransfer.DataFlavor flavor=java.awt.datatransfer.DataFlavor.stringFlavor;
if(transferable.isDataFlavorSupported(flavor))
{
try
{
int start=text.getSelectionStart();
int end=text.getSelectionEnd();
text.replaceRange("",start,end);
String str;
int n=text.getCaretPosition();
str=(String)transferable.getTransferData(flavor);
text.insert(str,n);
}
catch(Exception ee)
{

}
      }
}
java.awt.datatransfer.Transferable transferable=clipboard.getContents(this);//传送操作提供数据的类定义接口.放在剪切板的东西都实现了这个接口.

java.awt.datatransfer.DataFlavor flavor=java.awt.datatransfer.DataFlavor.stringFlavor//在数据拖放期间,或在文件系统中,当每 个实例显示在剪切板上时,它代表了数据格式的不透明概念.其实就是在系统内存中的东西是哪种类型.比如:文本,图片等.就象网页中的 contentType="text/html"等一样.这里的stringFlavor是字符类型.


通过操作系统的剪切板,可以实现在不同的程序中拷贝和粘贴数据。一些用Java写的程序例如很多开发环境也可以访问到剪切板,本文就是研究如何在Java程序中读写系统剪切板的数据。
通过操作系统的剪切板,可以实现在不同的程序中拷贝和粘贴数据。一些用Java写的程序例如很多开发环境也可以访问到剪切板,本文就是研究如何在Java程序中读写系统剪切板的数据。

Java中使用java.awt.datatransfer.Clipboard类来描述剪切板,并把剪切板分为两种类型:本地和系统,本地剪切板使用 Clipborad cp = new Clipboard("clip1"); 来构造;系统剪切板通过

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

获取,下面我们给出几个常用的方法用于读写剪切板中的文本数据以及图像数据

1. 从指定的剪切板中获取文本内容

protected static String getClipboardText(Clipboard clip) throws Exception{
   // 获取剪切板中的内容
   Transferable clipT = clip.getContents(null);
   if (clipT != null) {
    // 检查内容是否是文本类型
    if (clipT.isDataFlavorSupported(DataFlavor.stringFlavor))
     return (String)clipT.getTransferData(DataFlavor.stringFlavor);
   }
   return null;
}


2. 往剪切板写文本数据

protected static void setClipboardText(Clipboard clip, String writeMe) {
   Transferable tText = new StringSelection(writeMe);
   clip.setContents(tText, null);
}


3. 从剪切板读取图像

public static Image getImageFromClipboard() throws Exception{
   Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
   Transferable cc = sysc.getContents(null);
   if (cc == null)
    return null;
   else if(cc.isDataFlavorSupported(DataFlavor.imageFlavor))
    return (Image)cc.getTransferData(DataFlavor.imageFlavor);
   return null;
}


4. 写图像到剪切板

protected static void setClipboardImage2(final Image image) {
   Transferable trans = new Transferable(){
    public DataFlavor[] getTransferDataFlavors() {
     return new DataFlavor[] { DataFlavor.imageFlavor };
    }
    public boolean isDataFlavorSupported(DataFlavor flavor) {
     return DataFlavor.imageFlavor.equals(flavor);
    }
    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
     if(isDataFlavorSupported(flavor))
      return image;
     throw new UnsupportedFlavorException(flavor);
    }

   };
   Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null);
}


有了这四个方法,你下面可以自己写一些程序来进行测试,利用它来实现与其他程序结合测试对剪切板数据的操作。这里给出一个用于显示图像的类,只要把Image实例作为参数传入即可。


package javayou.clipboard;

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class ImageViewer extends Frame {

private Image image;


public ImageViewer(Image viewMe) {
   image = viewMe;
   MediaTracker mediaTracker = new MediaTracker(this);
   mediaTracker.addImage(image, 0);
   try {
    mediaTracker.waitForID(0);
   } catch (InterruptedException ie) {
    ie.printStackTrace();
    System.exit(1);
   }
   addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
     System.exit(0);
    }
   });
   //窗口适应图像大小
   setSize(image.getWidth(null), image.getHeight(null));
   //窗口标题
   setTitle("Viewing Image from Clipboard");
   setVisible(true);
}

public void paint(Graphics graphics) {
   graphics.drawImage(image, 0, 0, null);
}


public static Image getImageFromFile(String fileName) {
   Toolkit toolkit = Toolkit.getDefaultToolkit();
   Image image = toolkit.getImage(fileName);
   return image;
}

}


分享到:
评论

相关推荐

    java操作剪贴板

    NULL 博文链接:https://beyondjhf-2008.iteye.com/blog/575681

    Java操作剪贴板.txt

    Java操作剪贴板.txtJava操作剪贴板.txt

    java操作系统剪贴板内容数据

    java操作系统剪贴板内容数据,供大家一起共同分享学习。

    电脑与android手机的剪贴板操作工具,java开发,支持所有系统,安装jdk,配置环境变量就行,使用超级简单方便

    电脑与android手机的剪贴板操作工具,java开发,支持所有系统,安装jdk,配置环境变量就行,使用超级简单方便

    jclipboardhelper:Java中剪贴板相关操作的小助手库

    用于处理Java中系统剪贴板的帮助程序库。 玛文 您可以在pom.xml使用以下依赖项: < groupId>com.github.fracpete</ groupId> < artifactId>jclipboardhelper < version>0.1.2 支持的格式 复制到剪贴板 java....

    IsciTrimmer:操纵操作系统剪贴板的Java App。 删除空格,破折号等,并使所有字符变为大写

    IsciTrimmer 操纵操作系统剪贴板的Java App。 删除空格/破折号/句号等并使所有字符变为大写 这是用于将ISCI从多个来源和格式复制... 使用当前版本,您将必须手动单击“修剪”按钮,以便在用户剪贴板中正确格式化ISCI。

    jclasslib.rar_Java 8_java8 下载_java字节码查看工具;_jclasslib.jar_允许修改Jav

    4、在字节码显示的底部,现在有一个下拉列表,其中包含所有使用的操作码和一个按钮,以显示Java语言规范中相应的官方文档。 5、验证了偏移量,并且在字节码显示中标记了无效的分支指令。 5、在“一般信息”中显示...

    Thinking in Java简体中文(全)

    13.17.3 剪贴板 13.18 可视编程和Beans 13.18.1 什么是Bean 13.18.2 用Introspector提取BeanInfo 13.18.3 一个更复杂的Bean 13.18.4 Bean的封装 13.18.5 更复杂的Bean支持 13.18.6 Bean更多的知识 13.19 Swing入门 ...

    java联想(中文)

    13.17.3 剪贴板 13.18 可视编程和Beans 13.18.1 什么是Bean 13.18.2 用Introspector提取BeanInfo 13.18.3 一个更复杂的Bean 13.18.4 Bean的封装 13.18.5 更复杂的Bean支持 13.18.6 Bean更多的知识 13.19 Swing入门 ...

    qt编写的系统剪贴板监听小工具.zip

    操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络...

    Thinking in Java 中文第四版+习题答案

    13.17.3 剪贴板 13.18 可视编程和 13.18.1 什么是 13.18.2 用Introspector提取 13.18.3 一个更复杂的 13.18.4 Bean的封装 13.18.5 更复杂的Bean支持 13.18.6 Bean更多的知识 13.19 Swing入门 13.19.1 Swing有哪些...

    java写的记事本源代码

    响应后光标选中的内容提取到剪贴板,并删除该内容,光标定位在元初识位置 2.3复制(C) 菜单内点击或助记符C或快捷键(ctrl + C) 响应后光标选中内容提取到剪贴板,光标位置保持不变 2.4粘贴(P) 菜单内点击...

    用Java写的报表.

    剪贴板功能。支持文本方式和全格式两种方式。剪贴也允许在两个应用之间进行。可以从EXCELL单元格中复制到本应用中。 14.单元格线,滚动条,行头,列头显示可选. 15.支持公式定义,公式定义采用?作标记,如?sum(A1:B1...

    [js]javascript与剪贴板交互

    1.怎样操作剪贴板,从而实现复制、剪切与粘贴?同时判断剪贴板里边的数据是否是文本? if (!IsClipboardFormatAvailable(CF_TEXT)) return; if (!OpenClipboard(hwndMain)) return; hglb = GetClipboardData...

    Java版计算器

    缺少剪贴板、打印支持等;不支持双缓冲。 <2>Swing构件都是AWT的Cotainer类的直接或间接子类。AWT是Swing的基础,Swing是AWT的扩展。Swing构件均以“J”开头,Swing是扩展AWT后得到的轻量级构件,不依赖于操作...

    pasteimages:一个Intellij IDEA插件,可将剪贴板中的图像直接粘贴到Markdown文档中

    将图像粘贴到Markdown 将图像直接从剪贴板粘贴到Intellij中的Markdown文档中。 图像文件存放在相对于Markdown的可配置目录中。安装使用Intellij中的插件浏览器下载插件。 它最适合作为Jetbrains提供的扩展的扩展。...

    疯狂JAVA讲义

    第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 ...11.9 剪贴板 432 11.9.1 数据传递的类...

    Java+AW+Swing.rar_java 2 swing_java awt_java swing_swing_swing j

    Java 2 图形设计卷1 AWT Java 2 图形设计卷2 SWING 主要内容包括同位体、轻量构件、剪贴板与数据传输、颜色、无鼠标操作、打印、布局管理器、国际化、串行化、滚动性,字体与字号以及AWT,swing中的各种构件

    java 编程入门思考

    13.17.3 剪贴板 13.18 可视编程和Beans 13.18.1 什么是Bean 13.18.2 用Introspector提取BeanInfo 13.18.3 一个更复杂的Bean 13.18.4 Bean的封装 13.18.5 更复杂的Bean支持 13.18.6 Bean更多的知识 13.19 Swing入门 ...

Global site tag (gtag.js) - Google Analytics