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

本文介绍了如何使用JavaAWT中的Toolkit和Clipboard类进行字符串的复制和粘贴操作,包括设置系统剪切板内容、从剪切板获取内容以及判断剪切板内容是否为String类型的方法。示例代码详细展示了实现过程。
摘要由CSDN通过智能技术生成

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

}
以下是 Java 实现截取全屏并复制到剪切板的示例代码: ```java import java.awt.AWTException; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; public class ScreenCapture { public static void main(String[] args) { try { // 创建 Robot 对象 Robot robot = new Robot(); // 获取屏幕大小 Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); // 截取全屏幕 BufferedImage image = robot.createScreenCapture(screenRect); // 复制到剪切板 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); ImageSelection selection = new ImageSelection(image); clipboard.setContents(selection, null); // 从剪切板获取内容 Transferable transferable = clipboard.getContents(null); if (transferable != null && transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) { String text = (String) transferable.getTransferData(DataFlavor.stringFlavor); System.out.println(text); } } catch (AWTException | IOException ex) { ex.printStackTrace(); } } // 自定义 Transferable 类,实现复制 BufferedImage 到剪切板 private static class ImageSelection implements Transferable { private final BufferedImage image; public ImageSelection(BufferedImage image) { this.image = image; } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] {DataFlavor.imageFlavor}; } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor.equals(DataFlavor.imageFlavor); } @Override public Object getTransferData(DataFlavor flavor) throws IOException { if (flavor.equals(DataFlavor.imageFlavor)) { return image; } else { throw new IOException("Unsupported data flavor: " + flavor.getHumanPresentableName()); } } } } ``` 代码中使用 `Robot` 类实现截取全屏,使用 `Clipboard` 类实现复制到剪切板。需要注意的是,复制到剪切板的内容必须实现 `Transferable` 接口,因此需要自定义一个 `ImageSelection` 类来实现复制 `BufferedImage` 到剪切板
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kfepiza

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值