2012-12-06 34 views
1

我有Eclipse RCP应用程序。我自己的IntroPart扩展了org.eclipse.ui.part.IntroPart。 通过继承我得到这个方法:关闭/打开介绍部分之间的状态

@Override 
public void saveState(IMemento memento) { 
} 

Here是说,当工作台被关闭,该方法saveState和被称为上所有打开的视图。但是,只有在关闭我的洞应用程序时才是如此。如果我只关闭此页面,而不是洞口应用程序,我应该怎么做才能保存介绍页面状态?

+0

调用'saveState'方法? – tkotisis

+0

调用'saveState'would是一个伟大的想法,如果你弄清楚如何获得用于保留在工作台 – benez

回答

2

link的常见问题回答说:

另一种机制,坚持视图状态是JFace的IDialogSettings设施。对话框设置优于视图保存/初始化机制的优点是,您可以控制何时保持设置。

这是一个关于如何使用IDialogSettings坚持一个IntroPart的状态,当它被关闭,以及如何创建时,以恢复它的一个示例。 MyIntroPart是一个具有Text小部件的IntroPart。显示的文本在IntroPart关闭时保存,并在创建时恢复。

要获取partClosed事件,MyIntroPart会实现IPartListener2并向PartService注册自己。

private static final String MY_INTRO_SETTINGS = "my_intro_settings"; 
private static final String MY_INTRO_TEXT_KEY = "my_intro_text"; 

@Override 
public void createPartControl(Composite parent) { 
    this.text = new Text(parent, SWT.BORDER); 

    // try to load the settings 
    IDialogSettings settings = Activator.getDefault().getDialogSettings(); 
    IDialogSettings section = settings.getSection(MyIntroPart.MY_INTRO_SETTINGS); 
    if (section != null) { 
     // set the restored text string in the text widget 
     this.text.setText(section.get(MyIntroPart.MY_INTRO_TEXT_KEY)); 
    } 

    // register the part listener 
    getIntroSite().getWorkbenchWindow().getPartService().addPartListener(this); 
} 

这会将文本恢复到文本小部件。

MyIntroPart实现IPartListener2的partClosed当视图被关闭,以节省对话框设置:

@Override 
public void partClosed(IWorkbenchPartReference partRef) { 
    // remove part listener from part service 
    getIntroSite().getWorkbenchWindow().getPartService().removePartListener(this); 

    IDialogSettings settings = Activator.getDefault().getDialogSettings(); 

    // get the section of the text 
    IDialogSettings section = settings.getSection(MyIntroPart.MY_INTRO_SETTINGS); 

    // if it doesn't exist, create it 
    if (section == null) { 
     section = settings.addNewSection(MyIntroPart.MY_INTRO_SETTINGS); 
    } 

    // put text from text field in section 
    section.put(MyIntroPart.MY_INTRO_TEXT_KEY, this.text.getText()); 
} 

感谢弗雷德里克用于指出没有加载从或保存到一个文件,这里需要。

+0

状态,您可以跳过“文件名”的东西'IMemento'对象。只需从插件激活器中检索设置,将其与get/put一起使用,并且在应用程序存在时(调用Activator.stop()时)将保持设置。 – fredrik

+0

@fredrik谢谢!我认为在这里需要调用'save',因为OP在关闭部件后想要保存,而不是在退出应用程序之后。但它实际上没有使用文件就像预期的那样工作。我改变了代码。 –