Как я могу установить EList в качестве входа в JFace TableViewer? - PullRequest
3 голосов
/ 04 апреля 2019

Это мой первый ТАК вопрос. Я надеюсь, что предоставлю достаточно деталей.
У меня есть модель EMF с классом, называемым ScopeContainer, который имеет две ссылки для включения в качестве EList различных типов.

Я сгенерировал

  • модель
  • model.edit и
  • model.editor

коды с Genmodel

Я пытаюсь показать содержимое одного из этих списков в org.eclipse.jface.viewers.TableViewer только с одним столбцом.

Это не может быть org.eclipse.swt.widgets.List, так как я хочу иметь возможность редактировать эти записи.

TableViewer viewer;
AdapterFactory adapterFactory = storage.getDomain().getAdapterFactory();
AdapterFactoryLabelProvider labelProvider = new AdapterFactoryLabelProvider(adapterFactory);
AdapterFactoryContentProvider contentProvider = new AdapterFactoryContentProvider(adapterFactory);

viewer.setLabelProvider(labelProvider);
viewer.setContentProvider(contentProvider);
viewer.setInput(project.getScopecontainer().getFilters());

Когда я устанавливаю вход как объект ScopeContainer. Я вижу все объекты в обоих списках Когда я устанавливаю вход как EList<Filter>, таблица становится пустой. Что мне нужно сделать, чтобы установить вход TableViewer как EList?

Ответы [ 3 ]

3 голосов
/ 04 апреля 2019

Простым решением было бы переопределить AdapterFactoryContentProvider.getElements() для возврата массива Filter элементов (полученных из входа EList<Filter>).

1 голос
/ 08 апреля 2019

Как и предполагалось, я переопределил метод getElements:

public class EListContentProvider<T> extends AdapterFactoryContentProvider{

    public EListContentProvider(AdapterFactory adapterFactory) {
        super(adapterFactory);
    }

    @Override
    public Object[] getElements(Object inputElement) {
        Object[] arr = null;
        if(inputElement instanceof EList) {
            arr = ((EList<T>) inputElement).toArray();
        }
        return arr;
    }
}
0 голосов
/ 08 апреля 2019

Вы должны проверить класс org.eclipse.jface.viewers.ArrayContentProvider или класс org.eclipse.jface.databinding.viewers.ObservableListContentProvider , в зависимости от того, является ли ваш списокдолжен измениться или нет.

Эти контент-провайдеры делают именно то, что вы просите: управлять входом коллекции для таблицы или средства просмотра.

...