java.awt.datatransfer.Clipboard剪切板复制粘贴String

news/2024/11/29 0:44:32/

java.awt.datatransfer.Clipboard剪切板复制粘贴String

java.awt.Toolkit 是一个可用来获取操作剪切板的工具

Toolkit toolkit = Toolkit.getDefaultToolkit(); 获得 tookit

Clipboard systemClipboard = toolkit.getSystemClipboard(); 获得操作系统级的剪切板

		
Toolkit toolkit = Toolkit.getDefaultToolkit(); //tookit可用来获得系统剪切板
//操作系统的系统剪切板
Clipboard systemClipboard = toolkit.getSystemClipboard();
//虚拟机的剪切板只能在虚拟机范围起作用
//Clipboard jvmClipboard = new Clipboard("虚拟机自身的剪切板");String 想要要复制的字符串 = "想要复制的字符串";
StringSelection stringSection = new StringSelection(想要要复制的字符串);//setContents(Transferable contents,ClipOwner owner); 将剪切板的内容设置到指定的Transferable对象,并将指定的剪切板所有者作为新内容的所有者注册
systemClipboard.setContents(stringSection, null);System.out.println("文本内容以复制到剪切板, 可以打开一个文本编辑器,粘贴,看看");System.out.println("让后执行从剪切板取出内容并输出到控制台的操作,从剪切板获取到的内容为:👇");// @param  requestor the object requesting the clip data (not used)
// getContents(的参数), 指请求数据的请求者, 无用, 可以填null
Transferable transferable = systemClipboard.getContents(null);String str = (String) transferable.getTransferData(DataFlavor.stringFlavor);System.out.println(str);
package 剪切板复制粘贴;import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;public class AwtClipboard剪切板复制粘贴String230528 {public static void main(String...arugments)throws Exception{Toolkit toolkit = Toolkit.getDefaultToolkit(); //tookit可用来获得系统剪切板//操作系统的系统剪切板Clipboard systemClipboard = toolkit.getSystemClipboard();//虚拟机的剪切板只能在虚拟机范围起作用//Clipboard jvmClipboard = new Clipboard("虚拟机自身的剪切板");String 想要要复制的字符串 = "想要复制的字符串";StringSelection stringSection = new StringSelection(想要要复制的字符串);//StringSelection实现了Transferable接口, 所以也可写为👇// Transferable stringSection = new StringSelection(想要要复制的字符串);//setContents(Transferable contents,ClipOwner owner); 将剪切板的内容设置到指定的Transferable对象,并将指定的剪切板所有者作为新内容的所有者注册systemClipboard.setContents(stringSection, null);System.out.println("文本内容以复制到剪切板, 可以打开一个文本编辑器,粘贴,看看");System.out.println("让后执行从剪切板取出内容并输出到控制台的操作,从剪切板获取到的内容为:👇");// @param  requestor the object requesting the clip data (not used)// getContents(的参数), 指请求数据的请求者, 无用, 可以填nullTransferable transferable = systemClipboard.getContents(null);String str = (String) transferable.getTransferData(DataFlavor.stringFlavor);System.out.println(str);}}



包装,文本到系统剪切板的方法

	public static Clipboard strToSystemClipboard(String 要放入剪切板的字符串, Toolkit tookit) {Clipboard systemClipboard = null;if(tookit==null)tookit=Toolkit.getDefaultToolkit();systemClipboard=tookit.getSystemClipboard();Transferable transferable = new StringSelection(要放入剪切板的字符串);systemClipboard.setContents(transferable, null);return systemClipboard;}public static Clipboard strToSystemClipboard(String 要放入剪切板的字符串) {return strToSystemClipboard(要放入剪切板的字符串, null);}
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;public class AwtClipboard文本到剪切板的方法 {public static Clipboard strToSystemClipboard(String 要放入剪切板的字符串, Toolkit tookit) {Clipboard systemClipboard = null;if(tookit==null)tookit=Toolkit.getDefaultToolkit();systemClipboard=tookit.getSystemClipboard();Transferable transferable = new StringSelection(要放入剪切板的字符串);systemClipboard.setContents(transferable, null);return systemClipboard;}public static Clipboard strToSystemClipboard(String 要放入剪切板的字符串) {return strToSystemClipboard(要放入剪切板的字符串, null);}public static void main(String...arguments) {strToSystemClipboard("在文本编辑器粘贴,看看内容是否到了系统剪切板");}}



对比操作系统剪切板和虚拟机剪切板

package 剪切板复制粘贴;import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;public class AwtClipboard对比操作系统Clipboard和虚拟机Clipboard {public static void main(String...arguments)throws Exception{Toolkit tookit = Toolkit.getDefaultToolkit();Clipboard systemClipboard = tookit.getSystemClipboard();Clipboard jvmClipboard = new Clipboard("javaClipboard");StringSelection transfer010 = new StringSelection("要复制粘贴的内容一");Transferable transfer020 = new StringSelection("要复制粘贴的内容二");systemClipboard.setContents(transfer010, null);jvmClipboard.setContents(transfer020, null);System.out.println("可以打开一个文本编辑器,Ctrl+v或右键粘贴看看内容");System.out.println("操作系统  剪切板的内容是: \t" + systemClipboard.getContents(null).getTransferData(DataFlavor.stringFlavor));System.out.println("Java虚拟机剪切板的内容是: \t"+ jvmClipboard.getContents(null).getTransferData(DataFlavor.stringFlavor));}}

在这里插入图片描述




java.awt.datatransfer.Clipboard剪切板获取String字符串文本

有两种方法获取

  • 直接从Clipboard获得

    (String) systemClipboard.getData(DataFlavor.stringFlavor);
    
  • 从Clipboard获得Transable再获得String

    (String) systemClipboard.getContents(null).getTransferData(DataFlavor.stringFlavor);
    

Clipboard 的 getData(DataFlavor flavor) 的源码, java1.5版开始才有

    public Object getData(DataFlavor flavor)throws UnsupportedFlavorException, IOException {if (flavor == null) {throw new NullPointerException("flavor");}Transferable cntnts = getContents(null);if (cntnts == null) {throw new UnsupportedFlavorException(flavor);}return cntnts.getTransferData(flavor);}

包装的获取剪切板文本的方法,没有判断内容是否是String

	public static String getSystemClipboardString(Clipboard systemClipboard) {String result = null;if(systemClipboard==null)systemClipboard=Toolkit.getDefaultToolkit().getSystemClipboard();try {//			result = (String) systemClipboard.getContents(null).getTransferData(DataFlavor.stringFlavor);// ↑都可↓ 下面的getData方法1.5版才有result = (String) systemClipboard.getData(DataFlavor.stringFlavor);} catch (UnsupportedFlavorException | IOException e) {e.printStackTrace();}return result;}public static String getSystemClipboardString() {return getSystemClipboardString(null);}
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;public class AwtClipboard获取剪切板文本的方法 {public static String getSystemClipboardString(Clipboard systemClipboard) {String result = null;if(systemClipboard==null)systemClipboard=Toolkit.getDefaultToolkit().getSystemClipboard();try {//			result = (String) systemClipboard.getContents(null).getTransferData(DataFlavor.stringFlavor);// ↑都可↓ 下面的getData方法1.5版才有result = (String) systemClipboard.getData(DataFlavor.stringFlavor);} catch (UnsupportedFlavorException | IOException e) {e.printStackTrace();}return result;}public static String getSystemClipboardString() {return getSystemClipboardString(null);}public static void main(String...arguments) {System.out.println(getSystemClipboardString());}}

判断剪切板Transferable内容是否是String

  • 方法1, 从clipboard获得transferable, 再用transferable的isDataFlavorSupported(DataFlavor flavor)方法判断
boolean 是否剪切板的内容是文本 = transferable.isDataFlavorSupported(DataFlavor.stringFlavor);
  • 方法2 直接用clipboard的isDataFlavorAvailable(DataFlavor flavor)方法判断 , 该方法1.5版才有
boolean 是否剪切板的内容是文本 = systemClipboard.isDataFlavorAvailable(DataFlavor.stringFlavor);

Clipboard的isDataFlavorAvailable(DataFlavor flavor)方法从1.5版本开始才有, 可以简化代码, 其实质也是获得Transferable实例后调用其isDataFlavorSupported(DataFlavor flavor)方法判断
源码如下

    /*** Returns whether or not the current contents of this clipboard can be* provided in the specified {@code DataFlavor}.** @param  flavor the requested {@code DataFlavor} for the contents* @return {@code true} if the current contents of this clipboard can be*         provided in the specified {@code DataFlavor}; {@code false}*         otherwise* @throws NullPointerException if {@code flavor} is {@code null}* @throws IllegalStateException if this clipboard is currently unavailable* @since 1.5*/public boolean isDataFlavorAvailable(DataFlavor flavor) {if (flavor == null) {throw new NullPointerException("flavor");}Transferable cntnts = getContents(null);if (cntnts == null) {return false;}return cntnts.isDataFlavorSupported(flavor);}

包装的获取剪切板文本的方法,且判断内容是否是String

	public static String getSystemClipboardString(Clipboard systemClipboard) {String result = "剪切板的内容不是字符串文本StringText";if(systemClipboard==null)systemClipboard=Toolkit.getDefaultToolkit().getSystemClipboard();//		boolean 剪切板的内容是文本 = systemClipboard.getContents(null).isDataFlavorSupported(DataFlavor.stringFlavor);boolean 剪切板的内容是文本 = systemClipboard.isDataFlavorAvailable(DataFlavor.stringFlavor); // 1.5版才有if(剪切板的内容是文本) {try {//				result = (String) systemClipboard.getContents(null).getTransferData(DataFlavor.stringFlavor);result = (String) systemClipboard.getData(DataFlavor.stringFlavor); // 1.5版才有} catch (UnsupportedFlavorException | IOException e) {e.printStackTrace();}}return result;}public static String getSystemClipboardString() {return getSystemClipboardString(null);}
package 剪切板复制粘贴;import java.awt.Toolkit;
import java.awt.datatransfer.*;
import java.io.IOException;public class 判断剪切板的内容是文本才获取 {public static String getSystemClipboardString(Clipboard systemClipboard) {String result = "剪切板的内容不是字符串文本StringText";if(systemClipboard==null)systemClipboard=Toolkit.getDefaultToolkit().getSystemClipboard();//		boolean 剪切板的内容是文本 = systemClipboard.getContents(null).isDataFlavorSupported(DataFlavor.stringFlavor);boolean 剪切板的内容是文本 = systemClipboard.isDataFlavorAvailable(DataFlavor.stringFlavor); // 1.5版才有if(剪切板的内容是文本) {try {//				result = (String) systemClipboard.getContents(null).getTransferData(DataFlavor.stringFlavor);result = (String) systemClipboard.getData(DataFlavor.stringFlavor); // 1.5版才有} catch (UnsupportedFlavorException | IOException e) {e.printStackTrace();}}return result;}public static String getSystemClipboardString() {return getSystemClipboardString(null);}public static void main (String...arguments)throws Exception{System.out.println(getSystemClipboardString());}}

http://www.ppmy.cn/news/104977.html

相关文章

【SpringCloud——Docker】

一、什么是Docker 二、Docker的基本操作 1、Docker操作镜像 镜像名称一般由两部分组成:[repository]:[tag] 在没有指定tag时,默认是latest,代表最新版本的镜像。 1.1、启动Docker服务 systemctl start docker1.2、查看Docker运行状态 syst…

NLP基础知识(语法语义、LDA、N-gram、词嵌入)

文章目录 本节课大纲Hyper-simplified linguisticsTerm spotting handling negation, uncertaintyML to expand termspre-NN ML to identify entities and relationsLatent Dirichlet Allocation (LDA)Statistical Models of Language: Zipfs lawvector space embeddings base…

【异常捕获】

异常捕获 异常概念处理错误方式 异常处理举例栈展开异常规范异常继承层次优缺点 异常 概念 异常时程序可能检测到的,运行时不正常的情况,如存储空间耗尽,数组越界等,可以预见可能发生在什么地方但不知道在什么时候发生的错误。 …

安卓Termux搭建web服务器【公网远程手机Android服务器】

文章目录 概述1.搭建apache2.安装cpolar内网穿透3.公网访问配置4.固定公网地址5.添加站点 转载自cpolar极点云的文章:【手机建站】TermuxCpolar内网穿透,搭建可以被外网访问的网站 概述 Termux是一个Android终端仿真应用程序,用于在 Android…

vscode + CMake 构建C语言项目

文章目录 1. 所需工具2. 配置1. 编写顶级目录下的 CMakeLists.txt2. 编写子目录 src 里的 CMakeLists.txt3. 添加测试文件4. 开始构建 1. 所需工具 Visual Stduio Code(vscode) CMake 简介: CMake 是一个跨平台的 构建工具,用于 …

jdbc的入门

JDBC的基本介绍 JDBC即Java DataBase Connectivity(Java数据库连接),是Java语言访问数据库的一种标准方法。JDBC提供了一组API,用于连接不同类型的数据库并执行SQL语句,以便与数据库进行交互。 JDBC API包括两部分&a…

华硕天选4R FA617原装Windows11原厂预装系统工厂模式恢复安装带 ASUSRecevory 一键还原22H2版本

华硕天选4R FA617X原装Windows11原厂预装系统工厂模式恢复安装带ASUSRecevory一键还原 文件地址:https://pan.baidu.com/s/1Pq09oDzmFI6hXVdf8Vqjqw?pwd3fs8 提取码:3fs8 华硕工厂恢复系统 ,安装结束后带隐藏分区以及机器所有驱动软件 需准备一个16…

算法基础学习笔记——⑬高斯消元\组合计数\容斥原理

✨博主:命运之光 ✨专栏:算法基础学习 目录 ✨高斯消元 ✨组合计数 🍓通过预处理逆元的方式求组合数: 🍓Lucas定理: 🍓分解质因数法求组合数: 前言:算法学习笔记记录日常分享,需…