2011-12-14 57 views
2

是否可以將多個對象(代表TreeViewer選項)放入剪貼板?這是我的Cut代碼。TreeViewer選項和剪貼板

static public void Cut(EssentialData dataInst) 
{ 
    IStructuredSelection selection = (IStructuredSelection)dataInst.getTreeViewer().getSelection(); 

    if(selection == null) 
    { 
     System.err.println("selection received was null"); 
     return; 
    } 

    Object[] objects = selection.toArray(); 

    //because setContents requires a Transfer object for every object sent 
    List<Transfer> typesList = new ArrayList<>(); 

    for(int i = 0; i < objects.length; i++) 
     typesList.add(FileEntryTransfer.getInstance()); 

    final Clipboard cb = new Clipboard(Display.getCurrent()); 
    cb.setContents(objects, typesList.toArray(new Transfer[]{})); 
    cb.dispose(); 

    for(int i = 0; i < objects.length; i++) 
     dataInst.getFileManager().removeEntry((FileEntry)objects[i]); 

    dataInst.getTreeViewer().refresh(false); 
} 

我試圖做的是地方多個選擇,這是FileEntry情況下,到剪貼板。

FileEntryTransfer是我自定義的ByteArrayTransfer類,我也用於免打擾。它運作良好,但我注意到setContents()實際上只發送一個FileEntry對象,而不是對象數組(這正是我想要的)。

任何想法?

[編輯]感謝vanaprogeja,我

cb.setContents(new Object[]{ objects }, new Transfer[] { FileEntryTransfer.getInstance() }); 
+0

你不能用一個單獨的剪貼板對象?對不起,我沒有經歷過這個,只是把它扔在那裏。 – 2011-12-14 02:02:37

+0

要爲每個對象調用setContents()?不,那不行, setContents()替換剪貼板中的任何內容。 – BloodyNobody 2011-12-14 05:36:00

回答

2

如何sovled它:

cb.setContents(new Object[]{ objects }, 
    new Transfer[] { FileEntryTransfer.getInstance() });