2015-11-02 246 views
-1

我通过复制属于同一数据类型的多个项目来利用Java SWT剪贴板进行复制/粘贴。在这种情况下,当我从剪贴板中取回项目时,我总是得到放置在剪贴板上的第一个匹配项目。 有人可以分享他们的想法/意见吗?用于剪切/复制/粘贴的Java剪贴板

例如:

我有三个项目说ABC相同的数据类型,然后,当我尝试找回回来我总是项目A

  1. 这个问题怎么解决?
  2. 是否有任何其他剪贴板可用于复制/粘贴?

clipboard.setContents(新对象[] {DATA1},新的转移[] {TextTransfer.getInstance()}); clipboard.setContents(new Object [] {data2},new Transfer [] {TextTransfer.getInstance()});

当尝试检索:

字符串数据= (字符串)clipboard.getContents(TextTransfer.getInstance());

在这里,我们总是得到放置在剪贴板上的data1,我们如何获得data2?

+1

到目前为止你做了什么? – SSH

+0

@SSH clipboard.setContents(copyItems [],transfers []),这里copyitems是多个A,B,C和它们各自的传输,但是当试图在这里使用clipboard.getContents(传输)时,传递属于A或B或C,这里检索到的内容始终为A. –

回答

0

创建一个容纳物品列表的容器对象。然后,您可以将该容器对象的实例放入剪贴板,并根据需要从其中加载尽可能多的项目。

+0

这是否会影响性能/内存,因为我们通过容器创建项目的副本,还需要维护检索它们的逻辑? 在我看来,由于有多个项目,通过registerType方法可以为每个项目注册多种转移类型。对此有何想法? –

0

请参阅Clipboard.setContents的javadoc。调用setContents将清除剪贴板上的先前内容。

Javadoc:将指定类型的数据放在系统剪贴板上。可以同时在系统剪贴板上放置多种类型的数据。设置数据将清除系统剪贴板中的所有以前的数据,而不管类型如何。

javadoc还有一个示例,显示如何在剪贴板上设置不同的传输对象。

Clipboard clipboard = new Clipboard(display); 
String textData = "Hello World"; 
String rtfData = "{\\rtf1\\b\\i Hello World}"; 
TextTransfer textTransfer = TextTransfer.getInstance(); 
RTFTransfer rtfTransfer = RTFTransfer.getInstance(); 
Transfer[] transfers = new Transfer[]{textTransfer, rtfTransfer}; 
Object[] data = new Object[]{textData, rtfData}; 
clipboard.setContents(data, transfers); 
clipboard.dispose(); 
+0

同意不止一种类型的数据可以加速,我的问题是如果两个属于同一数据类型的项目被放置,那么你如何检索它们中的每一个? –