Как сохранить состояние дерева в приложении 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");