SWT JFace: SelectionProvider не работает в TabFolder

В 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 соответственно.

Я попытался сделать каждый TableViewer поставщиком выбора, когда пользователь выбирает соответствующий элемент вкладки (та же функция createPartControl редактора):

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, в представлении «Свойства» отобразятся свойства выбранной модели, я завершил эти вещи IPropertySource, и они хорошо работают в других редакторах, у которых нет папок с вкладками, поэтому я думаю, что проблема должна быть в Область поставщика выбора.

Есть идеи или кто-нибудь сталкивался с такой же проблемой?


person Dennis Wong    schedule 25.11.2011    source источник


Ответы (1)


Если у вас есть несколько поставщиков выбора в представлении или редакторе, вам нужно использовать посредник, такой как org.eclipse.jdt.internal.ui.viewsupport.SelectionProviderMediator. Обратите внимание, что он, к сожалению, внутренний, поэтому вам нужно скопировать его в свой собственный проект.

person Tonny Madsen    schedule 25.11.2011
comment
Я думаю, что в данный момент, я надеюсь, работает только один TableViewer, поэтому, если возможно, достаточно использовать setSelectionProvider для установки только одного просмотра. - person Dennis Wong; 25.11.2011