美国上市公司

亿元级外企IT培训企业

  • 全国服务监督电话400-827-0010
IT培训 > 资料库 > Java应用程序中实现copy图像功能
  • Java应用程序中实现copy图像功能

    发布:IT培训 来源:资料库 时间:2014-12-29

  • Java开发图形应用程序的朋友一定遇到过如何在程序中实现复制图像的功能。在jdk1.4以前,java本身就支持将程序中文字串复制给其它的非java应用程序使用,而将程序中的图像复制到非java应用程序简直难上加难。只到jdk1.4出来,这个问题才得以解决。

    一般我们开发java application界面,主要用swing图形包。几乎所有的swing控件都是由JComponent继承而来的。如果我们要取得JComponent的图像,可以用以下方式:

    Rectangle rect = comp.getBounds();

    BufferedImage bufImage = new BufferedImage(rect.width,

    rect.height,

    BufferedImage.TYPE_INT_RGB);

    Graphics g = bufImage.getGraphics();

    g.translate(-rect.x, -rect.y);

    comp.paint(g);

    这样的话,图像就保存到BufferedImage对象当中了。

    现在来看如何将这个BufferedImage复制到系统clipboard中。要做复制功能,一般是继承TransferHandler类,实现Transferable接口, 这样你的复制内容才能传到系统clipboard,为此我们来写一个ImageSelection类:

    /**

    *

    Copyright: Copyright (c) 2002

    * @author Turbo Chen

    * @version 1.00

    */

    import java.awt.*;

    import java.awt.image.*;

    import java.awt.datatransfer.*;

    import javax.swing.*;

    public class ImageSelection extends TransferHandler

    implements Transferable

    {

    private static final DataFlavor flavors[] =

    {DataFlavor.imageFlavor};

    private Image image;

    public int getSourceActions(JComponent c) {

    return TransferHandler.COPY;

    }

    public boolean canImport(JComponent comp, DataFlavor

    flavor[]) {

    for (int i=0, n=flavor.length; i

    if (flavor[i].equals(flavors[0])) {

    return true;

    }

    }

    return false;

    }

    //将图像复制到Image对象.

    public Transferable createTransferable(JComponent

    comp) {

    // Clear clip

    image = null;

    Icon icon = null;

    Rectangle rect = comp.getBounds();

    BufferedImage bufImage = new BufferedImage(rect.width,

    rect.height,

    BufferedImage.TYPE_INT_RGB);

    Graphics g = bufImage.getGraphics();

    comp.paint(g);

    if (bufImage != null ) {

    image = bufImage;

    return this;

    }

    return null;

    }

    // Transferable

    public Object getTransferData(DataFlavor flavor) {

    if (isDataFlavorSupported(flavor)) {

    return image;

    }

    return null;

    }

    public DataFlavor[] getTransferDataFlavors() {

    return flavors;

    }

    public boolean isDataFlavorSupported(DataFlavor

    flavor) {

    return flavor.equals(flavors[0]);

    }

    }

    利用这个类,就可以轻松的将JComponent图像复制到系统clipboard了.怎么使用呢,再来看看下面的代码:

    final Clipboard clipboard =

    kit.getSystemClipboard();

    Icon icon = new ImageIcon("myphoto.jpg");

    final JLabel label = new JLabel(icon);

    label.setTransferHandler(new ImageSelection());

    JButton copy = new JButton("Label Copy");

    copy.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

    TransferHandler handler =

    label.getTransferHandler();

    handler.exportToClipboard(label, clipboard,

    TransferHandler.COPY);

    }

    });

    在你的程序中,要有一个JFrame, 加上一个JLabel,一个JButton,将上面的代码加进入,你就可以在你的程序中看到图像如何复制到系统clipboard了.

  • 上一篇:Castor JDO: 一个欺诈的广告

    下一篇:Java实现自动在数据库表中生成ID号

2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56