2015-11-02 247 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

同意不止一種類型的數據可以加速,我的問題是如果兩個屬於同一數據類型的項目被放置,那麼你如何檢索它們中的每一個? –