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

クリップボードによるイメージの受け渡し

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

執筆者:掌田 津耶乃

Transferableとは?


前回、テキストのクリップボード利用について簡単に説明をしました。テキスト(マルチフォントでない、標準テキスト)のクリップボード利用は、非常に簡単です。必要な機能(クラス類)がすべて標準で付属しているのですから。が、それ以外のものの場合には、Transferableクラスを独自に定義して利用することになります。

では、イメージの読み込み用Transferableクラスを作成してみましょう。

class ImageSelection implements Transferable {
  private BufferedImage image;
  private DataFlavor[] flavor;
  
  public ImageSelection(BufferedImage image){
    this.image = image;
    flavor = new DataFlavor[]{DataFlavor.imageFlavor};
  }
  public synchronized DataFlavor[] getTransferDataFlavors(){
    return flavor;
  }

  public boolean isDataFlavorSupported(DataFlavor flavor){
    return this.flavor[0].equals(flavor);
  }

  public synchronized Object getTransferData(DataFlavor flavor)
    throws UnsupportedFlavorException, IOException {
    if (!this.flavor[0].equals(flavor)){
      throw new UnsupportedFlavorException(flavor);
    }
    return image;
}
}


Transferableをimplementsしたクラスでは、「getTransferDataFlavors」「isDataFlavorSupported」「getTransferData」といったメソッドを用意する必要があります。

このImageSelectionでは、privateフィールドに、イメージであるBufferedImageと、DataFlavorの配列を保持するようにしてあります。コンストラクタでは、これらのprivateフィールドにそれぞれ値を設定していますね。BufferedImageは、そのまま引数で渡されたものを設定します。またDataFlavor配列は、イメージのDataFlaverであるDataFlavor.imageFlavorを要素に持つ配列を作成して設定しておきます。

各メソッドの処理は、それほど難しいものではありません。getTransferDataFlavorsはDataFlavor配列をそのまま返すだけですし、isDataFlavorSupportedは引数で渡されたDataFlavorが、保管しているDataFlavor配列の要素と同じかどうかをチェックするだけです。またgetTransferDataも、DataFlavorが同じならば保管してあるBufferedImageを返します。

これで、イメージ用のTransferableが用意できました。後は、これを使ってクリップボードとやり取りをすればよいのです。
  • 1
  • 2
  • 3
  • 4
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

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