2014-03-26 25 views
1

我已經在partstack中創建了2個零件。所有部件使用相同的貢獻uri。我需要一個第三部分說「添加新部件」(或標籤)點擊時,它必須動態地創建一個新的部分而設置在第一兩個部分後,然後再次將部分「添加新零件」有來處結束。所以每當點擊「添加新零件」時,都必須創建新的零件。 爲「添加新零件」部分添加了以下代碼。在eclipse e4中點擊最後一部分(Tab)時動態創建零件

MPart part = partService.createPart("com.abc.xyz.project.partDescriptor.DynamicPart"); 
MPartStack stack = (MPartStack)modelService.find("com.abc.xyz.project.partstack.2", application); 
    stack.getChildren().add(part); 
      part.setLabel("New Dynamic Part"); 
    part.setVisible(true); 
    part.setCloseable(true); 
    partService.showPart(part, PartState.ACTIVATE); 

任何人都可以給我一些建議嗎?

在此先感謝

回答

0

創建應用模型零件描述符描述你要添加的部分。

使用EPartService創建零件:

MPart part = partService.createPart(part descriptor id); 

創建的部分添加到您的應用程序模型中定義的MPartStack,則可以使用EModelService

MPartStack stack = (MPartStack)modelService.find(stack id, application); 

stack.getChildren().add(part); 

確保你找到堆棧如果要從描述中創建多個零件,請檢查零件描述定義中的Multiple選項。

+0

在PartDescriptor中,我應該添加我創建的部件還是動態創建部件的類?我應該配置哪些PartDescriptor屬性? – Acjb

+0

零件描述符的配置與零件相同,只是您將其放置在應用程序模型的零件描述符部分。它是您想要動態創建的部分的完整描述。 –

+0

我已經完成了所有提到的步驟,但僅調用postconstruct並創建動態部分。下一次當我點擊零件選項卡時,它不會再創建新零件。 – Acjb

2

創建您在本例中的「添加新部件」動態,像(例如是用於輸入部分):

MPartStack stack = (MPartStack) modelService.find("your.part.stack.id", application); 
inputPart = MBasicFactory.INSTANCE.createInputPart(); 
inputPart.setContributionURI("bundleclass://your.plugin/your.class"); 
inputPart.setCloseable(isCloseable); 
stack.getChildren().add(inputPart); 
inputPart.setLabel("Add new part"); 

「bundleclass://your.plugin/your.class」是參考你的班級的內容。它就像片段編輯器中的「Class URI」字段。上面的代碼在零件堆棧中添加了一個新選項卡,但不激活零件,因此不會調用內容類中的@Postconstruct方法。當用戶點擊選項卡時,@Postconstruct方法被調用。在那裏你可以再次創建一個新的部分。

+0

但它只動態地創建零件一次。我想在每次點擊標籤時動態創建零件。這意味着在單擊「添加新零件」選項卡時,零件堆中零件的數量必須增加1個零件。 – Acjb

+0

正如我所說,如果你插入此代碼到@PostConstruct方法,您應在用戶每次點擊前面創建的標籤時獲得一個新的選項卡。 – Severin

+0

此postConstruct方法僅被調用一次,而不是每次都調用。我錯過了什麼? – Acjb

相關問題