国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何在Java應用程序中實現copy圖像功能

2019-11-18 13:12:14
字體:
來源:轉載
供稿:網友

  用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了.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肇东市| 讷河市| 同江市| 英吉沙县| 香格里拉县| 红安县| 讷河市| 哈尔滨市| 达日县| 竹北市| 石门县| 浮梁县| 玉环县| 精河县| 平塘县| 漠河县| 米泉市| 吕梁市| 济南市| 丘北县| 肥西县| 晋宁县| 隆化县| 肥西县| 连云港市| 盖州市| 自贡市| 名山县| 常山县| 南木林县| 和田市| 广河县| 揭东县| 龙南县| 海原县| 绩溪县| 临颍县| 十堰市| 阳江市| 洱源县| 富平县|