Java SWT/JFace中缺少预选事件的任何解决方法?
在我的应用程序中,我希望用户在离开选项卡之前保存任何更改(实现为Java SWT/JFace中缺少预选事件的任何解决方法?,java,swt,jface,Java,Swt,Jface,在我的应用程序中,我希望用户在离开选项卡之前保存任何更改(实现为CTabFolder) 我试图处理SelectionEvent,但它在选项卡更改后触发(为什么它甚至有一个doit字段?对于其他控件,它在更改之前触发吗?) 看看Bugzilla,我找到了,而且两个都没有修复 由于这一要求可能很常见,有人有解决办法吗?我有一个与org.eclipse.ui.part.MultiPageEditorPart一起使用的解决办法,它由CTabFolder支持。我将对其进行调整,以实现直接的CTabFold
CTabFolder
)
我试图处理SelectionEvent
,但它在选项卡更改后触发(为什么它甚至有一个doit
字段?对于其他控件,它在更改之前触发吗?)
看看Bugzilla,我找到了,而且两个都没有修复
由于这一要求可能很常见,有人有解决办法吗?我有一个与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()中,我弹出一个“是否保存”对话框,让用户有机会选择“是”、“否”或“取消”。是保存信息并返回true。否将信息还原为上次保存的状态并返回true。Cancel只返回false。您可能只想尝试保存,只有在保存失败时才返回false
在调用canChangePages()之前切换回旧页面可能看起来很奇怪。这个调用执行得很快,所以它给人一种标签从未切换过的错觉。无论canChangePages()花费多长时间,用户都不会看到选项卡更改,除非该更改通过该方法批准。我有一个解决方案,可用于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()中,我弹出一个“是否保存”对话框,让用户有机会选择“是”、“否”或“取消”。是保存信息并返回true。否将信息还原为上次保存的状态并返回true。Cancel只返回false。您可能只想尝试保存,只有在保存失败时才返回false
在调用canChangePages()之前切换回旧页面可能看起来很奇怪。这个调用执行得很快,所以它给人一种标签从未切换过的错觉。无论canChangePages()花费多长时间,用户都不会看到选项卡更改,除非该方法批准。我为CTabFolders和Trees提出了相同的解决方法:)我预期会出现一些闪烁,但没有看到任何闪烁。幸运的是,CTabFolder确实在关闭选项卡之前触发了一个事件:)从2015年起,
tabFolder.getSelectionIndex()
将始终返回与tabFolder.indexOf((CTabItem)e.item)相同的值。
。因此,SelectionListener
中的newPageIndex
始终等于oldPageIndex
。如果有人对此有困难,请自行维护旧页面索引以克服此问题。我为CTabFolders和Trees提出了相同的解决方法:)我预期会出现一些闪烁,但没有看到任何闪烁。幸运的是,CTabFolder确实在关闭选项卡之前触发了一个事件:)从2015年起,tabFolder.getSelectionIndex()
将始终返回与tabFolder.indexOf((CTabItem)e.item)相同的值。
。因此,SelectionListener
中的newPageIndex
始终等于oldPageIndex
。如果有人对此有困难,请自行维护旧页面索引以克服此问题。