Appletで表示した図形や画像などをWindowsのクリップボードに貼り付けるサンプルです。
ただし、Appletからクリップボードのリソースにアクセスするには、Javaのポリシーファイルを書き換える必要があります。
Clipboard cb = null; try { cb = Toolkit.getDefaultToolkit().getSystemClipboard(); } catch (AccessControlException e) { e.printStackTrace(); } BufferedImage img = new BufferedImage( 高さ, 幅, BufferedImage.TYPE_INT_ARGB); Graphics g = img.getGraphics();
//例えば画像をグラフィックスに対して描画する。 Image img = Toolkit.getDefaultToolkit().getImage("sample.png"); g.drawImage(img, 0, 0, null);
try{ //クリップボードにコピー ImageTransferable it = new ImageTransferable(img); cb.setContents(it,null); }catch(Exception e){ e.printStackTrace(); }
|
ImageTransferableクラスは自作クラスです。
// クリップボードイメージ転送クラス protected class ImageTransferable implements Transferable{ // イメージ Image img;
//データ形式 DataFlavor[] flvs;
public ImageTransferable(java.awt.Image img) throws ClassNotFoundException { this.img = img; flvs = new DataFlavor[1]; flvs[0] = new DataFlavor("image/x-java-image; class=java.awt.Image", "Image"); }
public DataFlavor[] getTransferDataFlavors(){ return flvs; }
public boolean isDataFlavorSupported(DataFlavor flavor){ return flvs[0].equals(flavor); }
public Object getTransferData(DataFlavor flavor) throws IOException, UnsupportedFlavorException{ if(flvs[0].equals(flavor)){ return img; } throw new UnsupportedFlavorException(flavor); }
public void lostOwnership(Clipboard clipboard, Transferable contents){ } }
|
ポリシーファイルには以下の行を追加してください。
ポリシーファイルの説明はまた別の記事で。
permission java.awt.AWTPermission "accessClipboard";