Javaプログラミング/Javaプログラミング関連情報

クリップボードによるイメージの受け渡し(2ページ目)

グラフィック・イメージをクリップボード経由で受け渡すには、少々複雑です。イメージ受け渡し用のTransferableクラスを定義しないといけません。

執筆者:掌田 津耶乃

カット&ペーストの処理


では、イメージのカット&ペーストの処理について考えてみましょう。ここでは、それぞれ「cut」「copy」「paste」というメソッドとして処理をまとめてみることにしましょう。

// オフスクリーン利用に以下のメソッドを準備
// public BufferedImage getOffImage();
// public void setOffImage(BufferedImage img);

public void cut(){
  this.copy();
  this.setOffImage(null); // イメージの設定
}

public void copy(){
  BufferedImage img = this.getOffImage(); // イメージの取得
  Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
  ImageSelection imgselection = new ImageSelection(img);
  clipboard.setContents(imgselection, null);
}

public void paste(){
  Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
  Transferable object = clipboard.getContents(null);
  try {
      BufferedImage image = (BufferedImage)object.getTransferData(DataFlavor.imageFlavor);
    this.setOffImage(image); // イメージの設定
  } catch (UnsupportedFlavorException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }
}


イメージを扱いますから、もともと用意されているイメージを取得したり、クリップボードから取り出したイメージを再設定したりする必要があります。とりあえずここでは、「getOffImage」「setOffImage」というメソッドを呼び出してイメージの取得・設定が行える、という形で作成をしておきました。

※カット、コピーのクリップボード処理

カットとコピーは、クリップボード関係の処理はほぼ同じです。違いは、「カットした場合には、保管していたイメージを新しくする」というだけです。ポイントは、クリップボードにイメージを設定する部分になりますね。

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
ImageSelection imgselection = new ImageSelection(img);
clipboard.setContents(imgselection, null);


クリップボード関係の処理は、この3行です。まず、ToolkitのgetSystemClipboardでClipboardインスタンスを取得します。そして、クリップボードに渡すためのImageSelectionインスタンスを作成し、ClipboardのsetContentsでImageSelectionをクリップボードに設定します。ImageSelectionさえ用意できれば、このように作業は非常に単純です。

※ペーストのクリップボード処理

ペーストの場合は、カット・コピーと逆の操作を行います。用意してあるイメージをクリップボードに設定するのですね。

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable object = clipboard.getContents(null);
// 以下、try内で実行
BufferedImage image = (BufferedImage)object.getTransferData(DataFlavor.imageFlavor);
this.setOffImage(image);


こちらも、まずはToolkitからgetSystemClipboardでClipboardインスタンスを取得します。続いて、getContentsを使ってクリップボードに保管されているデータをTransferableインスタンスとして取り出します。

ポイントは、この取り出したオブジェクトから、イメージを取り出す処理です。Transferableの「getTransferData」メソッドを使いますが、引数には「DataFlavor.imageFlavor」を指定してやります。これで、イメージのデータを取り出すことができます。取り出されたデータは、BufferedImageインスタンスにキャストして利用することができます。
  • 前のページへ
  • 1
  • 2
  • 3
  • 4
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます