2011-12-07 10 views
7

文字列をシステムのクリップボードにコピーするJavaアプリケーションを作成しました。コンストラクタは、私は細かい作業それを得たが、私はClipboardOwnerが何をするかわからないJava clipboardOwnerの目的は?

Clipboard.setContents(Transferable contents, ClipboardOwner owner) 

http://docs.oracle.com/javase/6/docs/api/java/awt/datatransfer/Clipboard.html

を使用していますか? Java APIを見ると、実際に多くの情報を伝えるわけではありません。

http://docs.oracle.com/javase/6/docs/api/java/awt/datatransfer/ClipboardOwner.html

でもClippboardOwner = nullの作品を渡す奇妙なこと。だから私はそれが何であるか正確には分からない。誰にも分かりますか?

+0

+1良い質問です。たぶんOracle/Javaは将来のためにそれを置いているかもしれませんが、私はしばしばこれを疑問視しています.JVMに多くのローカルクリップボードを置くことができると思っていましたが、@Signは違った考え方をしていますか? – Andy

答えて

3

アプリケーションまたはそのコンポーネントの1つがClipboardOwnerインターフェイスを適切な方法で実装している場合は、ユーザーが別のアプリケーションまたは独自のアプリケーションの別のコンポーネントからシステムクリップボードにデータをコピーしたことがわかります。 See this example

+1

別の言い方をすれば、Clipboardownerは、所有権消失イベントのコールバックを登録するためのもので、クリップボードへの変更です。これは、クリップボードのコピーイベントを監視する信頼できる方法です。 –

2

次の人がクリップボードに何かを置くと、あなたがクリップボードに与えた所有者は、もはやクリップボードにないことが伝えられます。既知の実装は1つしかなく、thisに従って空です。だから、ちょうどぶら下がっている痕跡のような尾のように見えます。

+0

標準APIに実装がない場合、独自のAPIを作成することを妨げるものはありません。 – MockerTim

+1

私はstdライブラリが他の実装を提供していない理由は、アプリケーションは一般的に異なる動作をしたいと考えていると思います。これは、イベントリスニングインタフェースの場合によくあることです。 AncestorListenerは標準ライブラリに実装されていません。 std libがアプリケーション固有のコードと対話できるように提供されています。 – allyourcode

+0

1つの実装も何もしません。[source](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/awt/datatransfer/StringSelection)を参照してください。 java#StringSelection.lostOwnership%28java.awt.datatransfer.Clipboard%2Cjava.awt.datatransfer.Transferable%29)。 'ClipboardOwner'インターフェースには' lostOwnership(..) 'というメソッドが1つしかなく、' StringSelection'で空のままです。 –

0

ユースケースの例は、任意の選択が自動的にクリップボードにコピーされるターミナルウィンドウの実装です。 lostOwnership(..)コールバックを使用して選択を解除することができます。これにより、現在選択されているのはクリップボードにある場合のみです。このイディオムは、例えば、 rxvt(ただし、Javaでは書かれていません)。

関連する問題