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

news2024/11/25 8:19:02

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(的参数), 指请求数据的请求者, 无用, 可以填null
		Transferable 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.coloradmin.cn/o/586618.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

【小可爱专属教程】服务器配置环境

【小可爱专属教程】服务器配置环境 安装CUDA和CUDNN安装CUDA安装CUDNN 安装Anaconda3安装Pytorch 安装CUDA和CUDNN 安装CUDA 文件已经上传至百度网盘 链接:https://pan.baidu.com/s/1LKzZXtSr1kXOnlfbO0cmEw?pwdgfbb 提取码:gfbbsudo sh cuda_11.3.…

【技术解决方案】(多级)缓存架构最佳实践

凌晨三点半了,太困了,还差一些,明天补上… 因为自己最近做的项目涉及到了缓存,所以水一篇缓存相关的文章,供大家作为参考,若发现文章有纰漏,希望大家多指正。 缓存涉及到的范围颇广&#xff0c…

spring boot整合Swagger2(2.9.2版本)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

计算机组成原理-中央处理器-指令流水线和多处理器

目录 一、指令流水线基本概念 1.1影响流水线的因素 1.1.1结构相关(资源冲突) 1.1.2 数据相关(数据冲突) 1.1.3 控制相关(控制冲突) 1. 2 流水线分类 二、流水线的多发技术 2.1 超标量技术 2.2 超流水技术 2.3 超长指令字 三、五段式指令流水线 四、多处理器系统基本概念…

I.MX RT1170加密启动详解(1):Encrypted Boot image组成

使用RT1170芯片构建的所有平台一般都是高端场合,我们需要考虑软件的安全需求。该芯片集成了一系列安全功能。这些特性中的大多数提供针对特定类型攻击的保护,并且可以根据所需的保护程度配置为不同的级别。这些特性可以协同工作,也可以独立工…

chatgpt赋能python:Python中的区间:什么是区间(Interval),如何使用区间

Python 中的区间:什么是 区间(Interval),如何使用区间 在Python中,区间(Interval)是一个广泛使用的数据结构,用于表示一段连续的数据范围。使用区间可以更方便地处理各种数据类型&a…

本地搭建CFimagehost私人图床【公网远程访问】

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

代码随想录算法训练营第四十一天 | 力扣 343. 整数拆分, 96.不同的二叉搜索树

343. 整数拆分 题目 343. 整数拆分 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 解析 1.确定dp数组(dp table)以及下标的…

史上最详细的使用Claude和接入Claude-api教程

是什么(What) Claude 是最近新开放的一款 AI 聊天机器人,是世界上最大的语言模型之一,比之前的一些模型如 GPT-3 要强大得多,因此 Claude 被认为是 ChatGPT 最有力的竞争对手。Claude 的研发公司是专注人工智能安全和研…

Java制作520表白代码——爱一个人需要理由吗?

✨博主:命运之光 ✨专栏:Java经典程序设计 520表白日,每个人都期待着浪漫的表白,而作为一名热爱编程的程序员,我决定用程序员的方式来向你表达我的爱意。 在2023年5月20日这个特殊的日子里,我要用一段特别的…

BM1684X-onnx模型转化为bmodel

1:在tpu-mlir目录下进入docker docker run --privileged --name tpu-mlir -v $PWD:/workspace -it sophgo/tpuc_dev:v2.2 原因:该镜像已创建,要么重新创建一个新进程,要么杀死老进程; 解决办法如下: 2:接着…

夜深人静学32系列17——OLED

夜深人静学32系列17——OLED OLED简介接口定义OLED驱动原理驱动函数OLED.COLED.HCubeMX配置 实战部分效果展示驱动代码 OLED简介 LED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机激光显示(Organic El…

基于YOLOV5的道路损伤(GRDDC‘2020)检测

1. GRDDC2020 数据集介绍 GRDDC2020 数据集是从印度、日本和捷克收集的道路图像。包括三个部分:Train, Test1, Test2。训练集包括带有 PASCAL VOC 格式 XML 文件标注的道路图像。 缺陷类型:D00、D01、D11、D10、D20、D40、D43、D44、D50、D0w0…

Otsu阈值法原理及实现

文章目录 Otsu算法简介Otsu 算法的逻辑源码实现 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 Otsu算法简介 Otsu阈值法发表于1979年,论文为A threshold selection method from gray level histograms,作者是日本东京大学的…

序列模型基础概念

一、公式定义 在时间 t t t观察到 x t x_{t} xt​,那么得到 T T T个不独立的随机变量 ( x 1 , . . . , x T ) − p ( X ) (x_{1},...,x_{T})-p(X) (x1​,...,xT​)−p(X) 由条件概率公式: p ( a , b ) p ( a ) p ( b ∣ a ) p ( b ) p ( a ∣ b ) p(a,…

chatgpt赋能python:Python中局部变量的介绍

Python中局部变量的介绍 在Python中,局部变量是在函数中定义的变量,其范围限制在该函数内部。每当函数被调用时,局部变量将被创建并且只在函数的执行期间存在。当函数执行结束时,局部变量将被销毁。 局部变量是在函数内部定义的…

代码随想录算法训练营第四十六天 | 力扣 139.单词拆分

139.单词拆分 题目 139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 解析 1.确定dp数组以及下标的含义 …

Windows上GIT配置文件的位置

Git作为常见的版本控制系统。在Windows上,我偶尔在CLI上使用官方的版本: Git for Windows 。本文简单介绍Windows下的git配置文件。 系统和全局的gitconfig 配置文件因环境而异(Windows 原生的cmd、Windows shell 或 MSYS2 shell)…

chatgpt赋能python:Python中如何取消列表

Python中如何取消列表 在Python中使用列表是一种非常常见的数据结构,它允许我们在其中存储任意数量的元素,并且可以非常容易地进行遍历和操作。但是,有时候我们需要从列表中删除元素。这个过程并不难,但是有些细节需要注意。本文…