我有一个适用于 org.eclipse.ui.part.MultiPageEditorPart 的解决方法,它由 CTabFolder 支持。我会将它改编为直接的 CTabFolder 实现。
首先使用选择监听器:
tabFolder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
pageChange(tabFolder.indexOf((CTabItem) e.item));
}
});
然后我像这样实现 pageChange():
protected void pageChange(int newPageIndex) {
boolean changingPages = this.changingPages;
this.changingPages = true;
int oldPageIndex = tabFolder.getSelectionIndex();
if (isDirty() && !changingPages) {
tabFolder.setSelection(oldPageIndex);
if (canChangePages()) {
tabFolder.setSelection(newPageIndex);
}
}
this.changingPages = false;
}
在 canChangePages() 中,我弹出一个你想保存对话框并让用户有机会选择是、否或取消。Yes 保存信息并返回 true。No 将信息恢复到上次保存的状态并返回 true。Cancel 只返回 false。您可能只是想尝试保存并仅在保存失败时返回 false。
在调用 canChangePages() 之前切换回旧页面可能看起来很奇怪。这个调用执行得很快,所以它给人一种标签从未切换过的错觉。无论 canChangePages() 花费多长时间,用户都不会看到选项卡更改,除非它得到该方法的批准。