swt view随着软件关闭而关闭,不再保留上次打开记录
时间: 2023-08-01 20:12:10 浏览: 50
SWT View 是指使用 SWT(Simple Widget Toolkit) 开发的视图部件。默认情况下,SWT View 会随着 Eclipse 软件的关闭而关闭,并不会保留上次打开的记录。
如果您希望在 Eclipse 下保留 SWT View 的状态,可以考虑使用 Eclipse 的 Memento 功能。Memento 是一种轻量级的状态保存机制,它可以在 Eclipse 关闭时保存 SWT View 的状态,并在下次打开 Eclipse 时自动还原。
具体来说,您可以在 SWT View 的 saveState() 方法中使用 Memento 保存视图的状态,例如窗口位置、大小、选中的项目等等。在创建 SWT View 时,您可以在 createPartControl() 方法中使用 Memento 恢复视图的状态。
以下是一个简单的示例代码,展示如何使用 Memento 保存和恢复 SWT View 的状态:
```java
public class MyView extends ViewPart {
private static final String MEMENTO_KEY = "myView";
private Composite parent;
private int x, y, width, height;
@Override
public void createPartControl(Composite parent) {
this.parent = parent;
// 创建 SWT View 的 UI 元素
// 恢复视图的状态
IMemento memento = getMemento();
if (memento != null) {
x = memento.getInteger("x");
y = memento.getInteger("y");
width = memento.getInteger("width");
height = memento.getInteger("height");
// 设置窗口位置和大小
parent.getShell().setBounds(x, y, width, height);
}
}
@Override
public void saveState(IMemento memento) {
super.saveState(memento);
// 保存视图的状态
memento = memento.createChild(MEMENTO_KEY);
memento.putInteger("x", parent.getShell().getBounds().x);
memento.putInteger("y", parent.getShell().getBounds().y);
memento.putInteger("width", parent.getShell().getBounds().width);
memento.putInteger("height", parent.getShell().getBounds().height);
}
private IMemento getMemento() {
// 获取视图的 Memento 对象
IViewSite site = getViewSite();
if (site instanceof IViewSiteMemento) {
return ((IViewSiteMemento) site).getMemento();
}
return null;
}
}
```
需要注意的是,如果您使用了多个 SWT View,每个视图都需要使用独立的 Memento key 来保存和恢复状态。