Модель GMF и табличное представление
Мне дали это задание, и я был бы признателен, если бы кто-то действительно помог. Я построил графическую модель через GMF, которая выглядит следующим образом;
Как видите, один из узлов в модели был выбран. Задача здесь состоит в том, чтобы создать представление затмения с таблицей, которая будет автоматически обновляться при выборе так называемого "Городского узла". Как вы можете догадаться из модели, таблица должна содержать стоимость пути ко всем городам. Позже я расширю свое решение, включив в него модифицированный алгоритм Дейкстры, но сейчас я застрял в создании табличного представления.
Я попытался построить его с помощью TableViewer, но он кажется довольно сложным, поскольку нам нужно установить вход таблицы в ContentProvider, но суть здесь в том, что, поскольку нам нужен SelectionListener для получения координат города (как это было приказано для расчета пути - затраты на расстояние между двумя соединенными городами, деленное на максимальную скорость, которая была указана на соединяющих улицах на графике), а также на выбранный в данный момент город, стоимость пути должна быть автоматически рассчитана и отображена в таблице при получении клик-события. Это означает, что нам как-то нужно обновлять входные данные, которые будут передаваться ContentProvider при каждом изменении выбора.
Для получения дополнительной информации я получаю текущий выбор с помощью метода selectionChanged интерфейса ISelectionListener, а внутри этого метода я помещаю информацию о городе в массив данных. Однако, хотя я объявил этот массив вне метода как открытый, я не могу получить к нему доступ извне метода и, следовательно, не могу передать ему contentProvider. В конце концов, ввод таблицы не может быть обновлен. Я пытался написать этот текст как можно проще, и я надеюсь, что вы, ребята, сможете мне помочь. Поскольку я не могу сейчас предвидеть, что должно быть сделано, я был бы очень признателен.
1 ответ
Вы на правильном пути!
На ваш выбор слушатель ISelectionListener.selectionChanged
Метод, который вы просто должны установить новый вход для зрителя с TableViewer.setInput
, Затем IStructuredContentProvider.inputChanged
метод вызывается у провайдера контента для зрителя. Именно здесь вы можете делать свои вещи с помощью нового ввода и обновлять зрителя TableViewer.refresh
,
Вы также можете использовать среду привязки данных JFace, но я думаю, что вы будете в порядке с тем, что я упомянул выше.