`

在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操作剪贴板

    在Java编程中,剪贴板操作是一个非常实用的功能,它允许程序之间共享数据,比如文本、图片等。本文将深入探讨如何使用Java API来实现剪贴板操作,并通过一个简单的示例程序`ClipBoardTest.java`来阐述核心概念。 ...

    Java操作剪贴板.txt

    ### Java操作剪贴板知识点详解 #### 一、概述 在现代软件开发中,剪贴板操作是一项常用的功能,尤其在桌面应用中更是不可或缺的一部分。Java 提供了强大的 API 来支持这一功能,使得开发者能够轻松地实现复制、剪切...

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

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

    监听剪贴板Java demo

    Java是Android开发的主要编程语言,因此编写一个Java demo来监听剪贴板的变化,可以帮助开发者检测用户是否在剪贴板中存入了敏感信息,从而提升应用的安全性。下面将详细讲解如何实现这个功能。 首先,我们需要引入...

    Java剪贴板的使用

    在日常的编程与应用开发中,剪贴板操作是一项基本但又极其实用的功能,尤其是在需要实现数据复制、粘贴等交互式操作时。Java平台提供了强大的剪贴板处理机制,允许开发者在应用程序中集成剪贴板功能,从而提升用户...

    Java 利用剪贴板交换程序间数据

    通过`Toolkit`和`Clipboard`类,我们可以轻松地将数据放入剪贴板,以及从剪贴板中读取数据,实现类似操作系统级别的复制和粘贴操作。这对于需要在不同应用程序之间共享数据的Java程序来说,是一个非常实用的功能。

    Java监听Windows剪贴板com.zip

    首先,Java提供了`java.awt.Toolkit`和`java.awt.datatransfer.Clipboard`类来访问和操作剪贴板内容。`Toolkit.getDefaultToolkit()`方法可以获取到系统默认的工具包,而`Clipboard`对象则可以从中获取或设置剪贴板...

    Java 剪贴板演示程序-完成复制粘贴功能.rar

    如`getDataFlavors()`用于获取剪贴板支持的数据类型,`hasDataFlavor(DataFlavor flavor)`检查剪贴板是否包含特定类型的数据,`getData(DataFlavor flavor)`则用于获取剪贴板中的数据。 要将数据放入剪贴板,可以...

    多线程 进度条 读txt 剪贴板操作 键盘命令 实例

    结合上述知识点,"窗口界面 加进度条2016 7 14"可能是一个教学资源或项目示例,展示了如何在具有窗口界面的应用中,使用多线程读取txt文件,并在读取过程中显示进度条,同时可能还包含了剪贴板操作和键盘命令的实现...

    自制的不覆盖复合剪贴板

    在程序开发过程中,程序员需要深入分析这些代码文件,以了解复合剪贴板如何实现多内容存储、如何通过用户界面与用户交互,以及如何避免复制新内容时覆盖原有内容。 考虑到源码可能存在的问题,开发者在使用这些资源...

    剪贴板代码

    对于Web开发,JavaScript提供了`navigator.clipboard`接口来操作剪贴板,但需要注意的是,由于隐私和安全原因,这个接口通常需要用户交互(如点击事件)触发。以下是一个简单的例子: ```javascript async function...

    剪贴板数据 获取 源程序 代码

    剪贴板数据获取是计算机编程中的一个常见任务,特别是在多应用程序交互或用户界面设计中。...以上内容详细介绍了剪贴板数据获取的基本原理和在不同编程语言中的实现方式,希望能对你的编程实践有所帮助。

    参考文档检索工具,通过监控剪贴板查找打开参考文件

    标题中的“参考文档检索工具”是一种实用程序,它允许用户快速定位和打开与剪贴板内容相关的文件。这个工具的核心功能是通过监控用户的剪贴板活动来触发搜索过程。一旦剪贴板上出现新的文本,工具会根据这些文本在...

    计算机软件-商业源码-203 使用剪贴板.zip

    在Linux中,通常通过X11的`Xlib`库来操作剪贴板。例如,`XOpenDisplay`打开显示器,`XSetSelectionOwner`设置剪贴板所有者,`XGetSelectionValue`获取剪贴板数据,`XCloseDisplay`关闭显示器。 4. **跨平台库和...

    Android开发之ClipboardManager剪贴板功能示例

    `ClipboardManager`还提供了`hasText()`方法,用于检查剪贴板中是否包含纯文本数据: ```java if (cm.hasText()) { // 剪贴板包含文本数据 } ``` **5. 剪贴板的多数据项支持** 除了单个文本数据,`...

    Android复制文本内容到系统剪贴板.rar

    在Android开发中,复制文本内容到系统剪贴板是一项常见的操作。这通常涉及到对Android的ClipboardManager类的使用,这是一个系统服务,允许应用程序存储和检索数据,如文本、图像等。接下来,我们将深入探讨如何在...

    WPF 推荐一个剪贴板内容查看工具.rar

    **标题解析:** "WPF 推荐一个剪贴板内容查看工具.rar...通过学习这个压缩包中的资源,开发者不仅可以掌握如何在WPF中创建剪贴板内容查看工具,还能深入理解WPF的特性和开发流程,为未来进行更复杂的WPF项目打下基础。

    计算机软件-商业源码-监视剪贴板内容_硬件与系统.zip

    【监视剪贴板内容】:剪贴板监视功能涉及到操作系统级别的编程,它允许程序实时获取剪贴板中的数据变化。这种技术在多个场景下都有应用,如数据安全监控、办公自动化系统、甚至某些恶意软件也可能利用此功能来窃取...

    Ruby-ClipboardRuby访问WindowsLinuxmacOSJava和Cygwin中剪贴板

    在JRuby中,`Clipboard`库可以利用Java的`java.awt.Toolkit`和`java.awt.datatransfer`包来操作剪贴板: ```ruby require 'java' import 'java.awt.Toolkit' import 'java.awt.datatransfer.StringSelection' ...

    Android剪贴板

    - 尽量避免在剪贴板中存储敏感数据,因为其他应用可能能够访问这些信息。 - 在处理剪贴板数据时,应该始终检查数据类型,以免出现未定义的行为。 综上所述,Android的剪贴板功能为开发者提供了方便的数据共享途径,...

Global site tag (gtag.js) - Google Analytics