java.awt.datatransfer

java.awt.datatransferパッケージ は、マシンの実装に依存しない アプリケーション間のデータ転送の機能を提供しようとしています。
現在(JDK1.1.2)のところ、 java.awt.datatransferパッケージ が提供するのは、 アプリケーション間のテキストデータのコピー&ペーストの機能のみです。 しかし、将来はマルチメディアに対応したデータの転送も実現されるでしょう。 また、ドラッグ&ドロップの機能も、このパッケージの中で実現するように 計画されています。
なお、従来のJavaのアプリケーションも、 awtが依存するそれぞれのウィンドウシステムが提供する コピー&ペーストの機能は利用できます。 現時点では二重にサービスが提供されるわけです。 今後どのような方向に統一していくのかも含め、java.awt.datatransfer は「発展途上段階」のパッケージだと言えるでしょう。

サンプルを紹介しながら、 java.awt.datatransferパッケージの 利用法を解説しましょう。 まず、コピー&ペーストの機能を 確認するために、2つのアプリケーション(以下に紹介)と 通信の仲立ちをする Clipboard のオブジェクトを含みます。
ソース・ファイル:CopyAndPaste.java

コピー元のアプリケーション Sender は、 textField 内のString オブジェクトを StringSelection クラスのオブジェクトに 変換し、クリップボードに送ります。 StringSelection はクリップボードに転送するための専用のデータのクラスです。 直感的には「郵便の封筒」のようなものだと考えればわかりやすいでしょう。
ソース・ファイル:Sender.java

コピー先のアプリケーション Receiver は、 クリップボードから StringSelection クラスのオブジェクト を受け取り、Stringのオブジェクトに変換し、textField に 表示します。
ソース・ファイル:Receiver.java

Sender と Receiver のインターフェイス部分は、 共通の ButtonAndText クラスの拡張です。 このクラスは Frameの拡張で、内部に Button と TextAreaのオブジェクトを 1つずつ含みます。 ボタンのアクション処理は新しいイベントモデルに基づいています。
JDK1.1 ではアクションの伝搬は任意のオブジェクト間で可能になります。 ここでは、Button クラスのオブジェクト button に発生したイベントを、 ButtonAndText クラスのオブジェクト自身が処理することにします。 button の側では、次のようにしてアクションの送り先を設定します。 (今までの Event オブジェクトは、 外側のウィンドウに自動的に伝搬されますが、 ActionEvent のオブジェクトは外側のウィンドウに自動的に伝搬はしません。)


   button.addActionListener( this );

アクションを受ける側は、ActionListenerインターフェイスを インプリメントしなくてはいけません。

public class ButtonAndText extends Frame ActionListener {

このインターフェイスが提供する actionPerformed() メソッドは ボタンからのアクションを受け取ると自動的に呼び出されます。
ソース・ファイル:ButtonAndText.java

さて、上の例では ClipboardOwnerインターフェイスが提供する lostClipboardOwner()メソッドは形式的にしか実装されていません。 このメソッドは、クリップボードに置かれたデータのオーナーが、 Clipboardの setContents()メソッドの呼び出しによって変更された時、 元のオーナーであるオブジェクトに通知がされ、呼び出される仕組みになっています。 ペーストの操作がユーザーに実行された時に、反転表示の解除や、 元のデータの消去などを行う場合に利用します。 以下にサンプルをしましておきます。

ソース・ファイル:Sender2.java Ver1.1
ソース・ファイル:Receiver.java Ver1.1