在GraphicalEditor中,我创建了一个标签文件夹:
private final String[] tabNames = { "Text", "Image" };
private ResourcesTextComposite comText;
private ResourcesImageComposite comImage;
...
public void createPartControl(Composite parent) {
...
tabFolder = new TabFolder(parent, SWT.BORDER);
for (int loopIndex = 0; loopIndex < tabNames.length; loopIndex++) {
TabItem tabItem = new TabItem(tabFolder, SWT.NULL);
tabItem.setText(tabNames[loopIndex]);
if (loopIndex == 0) {
comText = new ResourcesTextComposite(tabFolder, SWT.NONE,
resources);
tabItem.setControl(comText);
} else if (loopIndex == 1) {
comImage = new ResourcesImageComposite(tabFolder, SWT.NONE,
resources);
tabItem.setControl(comImage);
}
}
...
}
它有2个标签项,每个项目都有一个合成,每个合成分别有一个TableViewer。
当用户选择相应的选项卡项(编辑器的createPartControl函数)时,我尝试将每个TableViewer作为选择提供程序:
public void createPartControl(Composite parent) {
...
tabFolder.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
int tabIdx = tabFolder.getSelectionIndex();
getSite().setSelectionProvider(null);
if (tabIdx == 0) {
getSite().setSelectionProvider(comText.getViewer());
} else if (tabIdx == 1) {
getSite().setSelectionProvider(comImage.getViewer());
}
System.out.println("widgetSelected" + getSite() + ": "
+ getSite().getSelectionProvider());
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
...
}
我希望当我在TableViewer中选择一行时,Properties视图将显示所选模型的属性,我已经完成了那些IPropertySource的东西,并且它们在没有tab文件夹的其他编辑器中运行良好,所以我认为问题应该是在选择提供者区域。
任何想法或有没有人遇到过同样的问题?
答案 0 :(得分:2)
如果视图或编辑器中有多个选择提供程序,则需要使用org.eclipse.jdt.internal.ui.viewsupport.SelectionProviderMediator
之类的中介。请注意,它很遗憾是内部的,因此您需要将其复制到您自己的项目