Как сохранить состояние дерева в приложении Java RCP?

У меня есть простое RCP-приложение, в котором есть несколько мастеров, из которых у одного есть средство просмотра дерева. Я хочу сохранить состояние выбранного элемента в древовидном меню при следующем открытии этого конкретного представления. На данный момент я реализовал, используя статические переменные и все работает нормально. Я хочу знать, как это можно сделать лучше?

//Образец кода

private static RepositoryLocationItem lastRepoItemSelected;

Composite parent=new Composite(SWT.NONE)
treeViewer = new TreeViewer(parent);
treeViewer.setContentProvider(new MovingBoxContentProvider());
treeViewer.setLabelProvider(new MovingBoxLabelProvider());
treeViewer.setInput(getInitalInput());

treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {

/* Setting the value of lastRepoItemSelected */
});


if(lastRepoItemSelected !=null)
{
treeViewer.setSelection(new StructuredSelection(lastRepoItemSelected),true); 
}

1 ответ

Предполагая, что это RCP в стиле 3.x (ваше мнение расширяется ViewPart) вы можете использовать saveState способ сохранить состояние просмотра:

@Override
public void saveState(final IMemento memento)
{
  // TODO set values in the 'memento'
}

Затем вы можете использовать init метод для восстановления значений из сувенира, когда представление отображается снова:

@Override
public void init(final IViewSite site, final IMemento memento)
  throws PartInitException
{
  super.init(site, memento);

  // TODO restore from 'memento'
}

Примечание. Памятки сохраняются при перезапуске RCP, поэтому в них необходимо хранить значения, которые действительны в новом экземпляре RCP.

Также посмотрите на запись Eclipse вики для получения дополнительной информации.

Для WizardPage Вы можете использовать IDialogSettings, Вы должны установить это в своем Wizard используя что-то вроде:

IDialogSettings pluginSettings = Activator.getDefault().getDialogSettings();
IDialogSettings wizardSettings = pluginSettings.getSection("id of your wizard");
if (wizardSettings == null) {
    wizardSettings= new DialogSettings("id of your wizard");
    pluginSettings.addSection(wizardSettings);
}
setDialogSettings(wizardSettings);

где Activator это ваш класс активатора плагина, а "имя вашего мастера" - это идентификатор вашего мастера (который может быть любым, если он уникален в вашем плагине).

На странице мастера вы можете получить настройки:

IDialogSettings settings = getDialogSettings();

IDialogSettings имеет много методов для сохранения и восстановления различных значений, таких как:

settings.put("key", "string value");

String value = settings.get("key");
Другие вопросы по тегам