`
msn877763580
  • 浏览: 81159 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java 剪贴板程序

阅读更多
hoverlees 写道

众所周知,这个包主要是与系统剪切板相关的的软件包(还有就是与JFC里的拖曳编程相关),这个包的核心类当然是Clipborad类(个人认为),这个 类我们就看成是一个剪切板,它具有储存的内容,我们可以取得和设置它的内容.它的内容被封装在Transferable里,我们最终要取得的数据,就是在 它里面.说到Transferable接口,我不得不提一下StringSelection类,这个类就是它的一个实现,专门用来向剪切板传输文本数据 的.为什么要叫StringSelection,我想因为平时我们把文本复制到剪切板的时候,这些文本都是被选择好的,所以就会取个这个类名吧.呵 呵~~~当我们用StringSelection向Clipborad传输文本数据的时候,我们剪切板的Transferable数据就可以是一个 StringSelection对象.像这样:
StringSelection ss=new StringSelection("放入剪切板的文本");
clipboardobj.setContents(ss,ss);//两个参数都是ss,因为StringSelection既是Transferable,也是ClipboardOwner.
DataFlavor表示的是存储数据的格式,因为我们的剪切板里到底是文本,图像,还是上次复制的文件我们根本不知道,幸好有它让我们可以先知道Clipboard里存的是些什么东西.
一个剪切板还可以加入数据改变的监听器,当剪切板的数据改变时做一些操作.这主要是在Clipboard里加入监听即可.

package cn.sisy.awt;

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 CopyStringToClipboard {

	public static void main(String[] args) {

		String str = "a string for copy";

		Toolkit toolkit = Toolkit.getDefaultToolkit();
		Clipboard clipboard = toolkit.getSystemClipboard();
		StringSelection strSel = new StringSelection(str);
		clipboard.setContents(strSel, null);
		
		if(clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)){
			try {
				String content = (String) clipboard.getData(DataFlavor.stringFlavor);
				System.out.println(content);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
		}
	}

}

 已复制如下:


下面看看图片如何复制:


 实现自定义的ImageSelection类用于支持图片的复制:

package cn.sisy.awt;

import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;

public class ImageSelection implements Transferable {
	
	private Image image;
	
	public ImageSelection(Image image) {
		this.image = image;
	}

	@Override
	public DataFlavor[] getTransferDataFlavors() {
		return new DataFlavor[]{DataFlavor.imageFlavor};
	}

	@Override
	public boolean isDataFlavorSupported(DataFlavor flavor) {
		// TODO Auto-generated method stub
		return flavor.equals(DataFlavor.imageFlavor);
	}

	@Override
	public Object getTransferData(DataFlavor flavor)
			throws UnsupportedFlavorException, IOException {
		if(flavor.equals(DataFlavor.imageFlavor)){
			return image;
		}else{
			throw new UnsupportedFlavorException(flavor);
		}
	}

}

 实现类CopyImage

package cn.sisy.awt;

import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.List;


public class CopyImage {
	private Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
	private final int AREA_WIDTH = 400;
	private final int AREA_HEIGHT = 400;
	private int preX = -1;
	private int preY = -1;
	BufferedImage image = new BufferedImage(AREA_WIDTH, 
			AREA_HEIGHT, BufferedImage.TYPE_INT_RGB);
	java.util.List<Image> imageList  = new java.util.ArrayList<Image>();
	Graphics g = image.getGraphics();
	private Frame f = new Frame("图形复制程序");
	private MyCanvas myCanvas = new MyCanvas();
	private Color foreColor = new Color(255,0,0);
	private Button copy = new Button("复制");
	private Button paste  = new Button("粘贴");
	public void init(){
		g.fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT);
		myCanvas.setPreferredSize(new Dimension(AREA_WIDTH,
				AREA_HEIGHT));
		myCanvas.addMouseMotionListener(new MouseAdapter() {
			public void mouseDragged(MouseEvent e){
				preX = e.getX();
				preY = e.getY();
				if(preX > 0 && preY > 0){
					g.setColor(foreColor);
					g.drawLine(preX,preY,e.getX(),e.getY());
				}
				myCanvas.repaint();
			}
		});
		
		myCanvas.addMouseListener(new MouseAdapter(){
			public void mouseReleased(MouseEvent e){
				preX = -1;
				preY = -1;
			}
		});
		f.add(myCanvas);
		Panel p = new Panel();
		copy.addActionListener(new ActionListener() {		
			@Override
			public void actionPerformed(ActionEvent e) {
				ImageSelection contents = new ImageSelection(image);
				clipboard.setContents(contents, null);
			}
		});
		paste.addActionListener(new ActionListener() {		
			@Override
			public void actionPerformed(ActionEvent e) {
				if(clipboard.isDataFlavorAvailable(DataFlavor.imageFlavor)){
					try {
						imageList.add((Image)clipboard.getData(DataFlavor.imageFlavor));
						myCanvas.repaint();
					} catch (Exception e1) {
						e1.printStackTrace();
					}
				}
			}
		});
		p.add(copy);
		p.add(paste);
		f.add(p,BorderLayout.SOUTH);
		f.pack();
		f.setVisible(true);
	}
	public static void main(String[] args) {
		new CopyImage().init();
	}
	class MyCanvas extends Canvas{
		@Override
		public void paint(Graphics g) {
			g.drawImage(image,0,0,null);
			System.out.println(imageList.size());
			for(Image img : imageList){
				g.drawImage(img,0,0,null);
			}
		}
	}
}

 

 

 
  • 大小: 10.9 KB
  • 大小: 24.5 KB
  • 大小: 59.2 KB
分享到:
评论

相关推荐

    java操作剪贴板

    NULL 博文链接:https://beyondjhf-2008.iteye.com/blog/575681

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

    Java 剪贴板演示程序-完成复制粘贴功能,你可通过本程序密切关注剪切板的状况,可看到剪切板中的内容,你可通过点击窗口上的拷贝、粘贴功能看到这一过程。

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

    Java利用剪贴板交换程序间数据,这个例实现了Java 程序与所在系统的剪贴板的数据交流,,当单击“Paste”  按钮后,Java 程序从系统剪贴板中取得数据并显示在一个JTextArea 组件中;当单击“Copy”按钮后,文本区...

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

    Java版复制粘贴剪切板,利用剪贴板交换程序间数据,解压后导入整个包

    Java 剪贴板 数据交换的例子.rar

    Java 剪贴板 数据交换的例子,实现了Java 程序与所在系统的剪贴板的数据交流,,当单击“Paste” ,按钮后,Java 程序从系统剪贴板中取得数据并显示在一个JTextArea 组件中;当单击“Copy”按钮后,文本区中的选中...

    java代码-使用java制作一个简单的剪贴板程序的源代码

    java代码-使用java制作一个简单的剪贴板程序的源代码 ——学习参考资料:仅用于个人学习使用!

    java写字板简单程序代码

    具体要求:基本的文本录入,字符修改,删除,换行,粘贴,复制,剪切等功能,主要包括: 1. 菜单栏设计及功能实现:菜单栏主要包括文件、编辑、格式、帮助等常见菜单。 其中文件菜单有新建、打开、保存、另存为、...

    基于剪切板的多线程程序

    该程序是一个基于剪切板的多线程程序,程序较为简单,但可以帮助理解多线程编程。

    华科java程序设计-简易写字板程序设计

    华科java程序设计-简易写字板程序设计 基本的文本录入,字符修改,删除,换行,粘贴,复制,剪切等功能 包括代码和报告

    Java写字板程序实验

    具体要求:基本的文本录入,字符修改,删除,换行,粘贴,复制,剪切等功能,主要包括: 1. 菜单栏设计及功能实现:菜单栏主要包括文件、编辑、格式、帮助等常见菜单。 其中文件菜单有新建、打开、保存、另存为、...

    写字板程序(java)

    final JMenuItem cut = new JMenuItem("剪切"); final JMenuItem selectall = new JMenuItem("全选"); JMenuItem huanhang = new JMenuItem("自动换行"); final JMenuItem font = new JMenuItem("字体..."); ...

    Java利用剪贴板实现交换程序间数据的方法

    主要介绍了Java利用剪贴板实现交换程序间数据的方法,需要的朋友可以参考下

    简单写字板程序java

    写字板有文件、编辑、格式、帮助。 文件:新建、打开、保存、另存为、退出 编辑:复制、剪切、粘贴、全选、删除 格式:自动换行、字体、颜色 帮助:关于

    java程序设计简易写字板

    java程序设计简易写字板,编辑、删除、粘贴、复制、剪切、保存、另存、前景色、背景色、右击鼠标、退出、帮助等写字板基本功能

    Java程序批量生成二维码EPS、CSV、PDF矢量图和各种格式二维码

    识别剪切板中的二维码,可以将生成的二维复制到剪切板。最新功能支持导入码内容文件批量生成二维码,支持生成带中国二维码注册解析中心(IDcode)认证的二维码。 运行方式:1、在项目上右击 运行java程序,入口在...

    基于Java的模拟写字板的设计与实现设计与实现.doc

    此简易JAVA写字板程序,使用Java程序编写,能够进行输入文字操作,并具有新建文件,打开文件,保存文件,退出,复制,粘贴,剪切,全选,撤销等多种基本功能。该程序主要用到了Java swing和事件监听等。 关键词: ...

    基于Java的模拟写字板的设计与实现(项目报告+答辩PPT+源代码+数据库).zip

    此简易JAVA写字板程序,使用Java程序编写,能够进行输入文字操作,并具有新建文件,打开文件,保存文件,退出,复制,粘贴,剪切,全选,撤销等多种基本功能。该程序主要用到了Java swing和事件监听等。 模拟写字板...

    Java窗体程序批量生成二维码EPS、CSV、PDF矢量图和各种格式二维码图片

    识别剪切板中的二维码,可以将生成的二维复制到剪切板。最新功能支持导入码内容文件批量生成二维码,支持生成带中国二维码注册解析中心(IDcode)认证的二维码。 运行方式:1、在项目上右击 运行java程序,入口在...

Global site tag (gtag.js) - Google Analytics