小操作大智慧--java实现复制粘贴

本文介绍如何使用Java实现文本和图像的复制粘贴功能,包括获取系统剪贴板、设置复制内容及从剪贴板读取数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

闲来无事,突发奇想,看似简单的ctrl+c 和ctrl+paste如何用java来实现呢。

当我们桥下键盘的 ctrl+c 和ctrl+paste 时,系统就会往剪贴板存入数据。数据可以是文本,图像,文件等。就像我们把图片粘贴到QQ窗口,就会出现图像。

本文只是一个引子,实现了文本和图像的复制粘贴,但却卡在了文件的复制粘贴上。望能得到高人指点,感激涕零,叩头膜拜~~☺

少说废话,上代码,注释在代码里了。

(一)文本的复制粘贴

import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; public class CopyAndPaste { public static void main(String[] args) { //copy(); //可以 在键盘上 ctrl + v paste(); } public static void copy(){ Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); //得到系统剪贴板 String text = "这是要拷贝的内容"; StringSelection selection = new StringSelection(text); clipboard.setContents(selection, null); } public static void paste(){ Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); DataFlavor flavor = DataFlavor.stringFlavor; if(clipboard.isDataFlavorAvailable(flavor)){//是否符合剪贴板的数据类型 try { System.out.println("此时剪贴版的数据是:" + clipboard.getData(flavor)); } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } }


(二)图像复制粘贴,做了一个UI,对面板分别有 复制、粘贴、清除图像的操作。

import java.io.*; import java.awt.*; import java.awt.datatransfer.*; import java.awt.event.*; import java.awt.image.*; import javax.swing.*; public class ImageTransferTest { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() //awt线程模式,保证事件处理的稳定性 { public void run() { JFrame frame = new ImageTransferFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } } /** * 图像面板 */ class ImageTransferFrame extends JFrame { public ImageTransferFrame() { setTitle("复制粘贴image"); //标题 setSize(600, 600);// 长宽 int screen_width = Toolkit.getDefaultToolkit().getScreenSize().width; int screen_height = Toolkit.getDefaultToolkit().getScreenSize().height; setLocation((screen_width - getWidth()) / 2, (screen_height - getHeight()) / 2); //坐标 label = new JLabel(); //绘制图像 image = new BufferedImage(DEFAULT_WIDTH, DEFAULT_HEIGHT, BufferedImage.TYPE_INT_ARGB); Graphics g = image.getGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT); g.setColor(Color.RED); g.fillOval(DEFAULT_WIDTH / 4, DEFAULT_WIDTH / 4, DEFAULT_WIDTH / 2, DEFAULT_HEIGHT / 2); label.setIcon(new ImageIcon(image)); add(new JScrollPane(label), BorderLayout.CENTER); JPanel panel = new JPanel(); JButton copyButton = new JButton("Copy"); panel.add(copyButton); copyButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { copy();//复制 } }); JButton pasteButton = new JButton("Paste"); panel.add(pasteButton); pasteButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { paste(); //粘贴 } }); JButton clearButton = new JButton("clear"); panel.add(clearButton); clearButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { clear(); //清除 } }); add(panel, BorderLayout.SOUTH); } public void clear(){ label.setIcon(null); } /** * 复制图像到系统的剪贴板 */ private void copy() { Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); //得到系统剪贴板 ImageTransferable selection = new ImageTransferable(image); //图像通道 clipboard.setContents(selection, null); } /** * 粘贴图像到系统的剪贴板 */ private void paste() { Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); //得到系统剪贴板 DataFlavor flavor = DataFlavor.imageFlavor; //得到数据 if (clipboard.isDataFlavorAvailable(flavor)) //判断剪贴板是否支持 复制的数据类型 { try { image = (Image) clipboard.getData(flavor); label.setIcon(new ImageIcon(image)); } catch (UnsupportedFlavorException exception) { JOptionPane.showMessageDialog(this, exception); } catch (IOException exception) { JOptionPane.showMessageDialog(this, exception); } } } private JLabel label; private Image image; private static final int DEFAULT_WIDTH = 600; private static final int DEFAULT_HEIGHT = 600; } /** * 实现图像通信的管道接口. */ class ImageTransferable implements Transferable { public ImageTransferable(Image image) { theImage = image; } public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { DataFlavor.imageFlavor }; } public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor.equals(DataFlavor.imageFlavor); } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { if (flavor.equals(DataFlavor.imageFlavor)) { return theImage; } else { throw new UnsupportedFlavorException(flavor); } } private Image theImage; }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值