Java的clipboardOwner目的是什么?

8

我编写了一个Java应用程序,可以将字符串复制到系统剪贴板。构造函数使用

Clipboard.setContents(Transferable contents, ClipboardOwner owner)

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

我已经成功运行了它,但我不确定ClipboardOwner是什么?查看Java api并没有提供太多信息。

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

奇怪的是,即使将ClippboardOwner设置为null也可以正常运行。所以我不太确定它的作用是什么?有人有任何想法吗?


+1 很好的问题。也许Oracle/Java已经为未来做好了准备,但我经常想到这个问题 - 我认为这与JVM中可以有许多本地剪贴板有关,但@Sign似乎持不同意见?! - Andy
3个回答

4

如果你的应用程序或其中一个组件以适当的方式实现了ClipboardOwner接口,它可以向你显示用户从另一个应用程序或自己应用程序的另一个组件复制了一些数据到系统剪贴板。 查看此示例


1
换句话说,Clipboardowner 用于注册丢失所有权事件的回调函数,也就是剪贴板上发生的一些更改。这可能是一种可靠的监视剪贴板复制事件的方法。 - Yu Shen

2
当下一个人将某些内容放入剪贴板时,你所赋予的剪贴板所有者将被告知他们不再在剪贴板上。目前只有一个已知的实现,并且根据此处的描述,它是空的。因此看起来像是一条退化的尾巴,只是悬在那里。

如果标准API缺少实现,你可以自己动手实现。 - MockerTim
1
我认为标准库没有提供其他实现的原因是应用程序通常需要不同的行为。这通常适用于事件监听接口,例如AncestorListener在标准库中没有任何实现。它被提供是为了使标准库能够与特定于应用程序的代码进行交互。 - allyourcode
这个实现也什么都不做,可以查看源代码ClipboardOwner接口中只有一个方法,即lostOwnership(..),并且由StringSelection留空。 - Evgeni Sergeev

0
一个示例用例是终端窗口实现,其中任何选择都会自动复制到剪贴板。可以使用lostOwnership(..)回调取消选择,以便用户知道仅当当前在剪贴板上时才显示选择。例如,在rxvt中使用了这种习惯用法(但它不是用Java编写的)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接