現在(JDK1.1.2)のところ、
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() メソッドは
ボタンからのアクションを受け取ると自動的に呼び出されます。
さて、上の例では ClipboardOwnerインターフェイスが提供する
lostClipboardOwner()メソッドは形式的にしか実装されていません。
このメソッドは、クリップボードに置かれたデータのオーナーが、
Clipboardの setContents()メソッドの呼び出しによって変更された時、
元のオーナーであるオブジェクトに通知がされ、呼び出される仕組みになっています。
ペーストの操作がユーザーに実行された時に、反転表示の解除や、
元のデータの消去などを行う場合に利用します。
以下にサンプルをしましておきます。
ソース・ファイル:Sender2.java Ver1.1
ソース・ファイル:Receiver.java Ver1.1