所以我有IWorkbenchWiondow
个对象,window
。
我将此监听器添加到它:
window.addPageListener(new IPageListener()
{
@Override
public void pageOpened(IWorkbenchPage page)
{
// method stub
}
/**
* Whenever the user tries to close the workbench window, this method gets called.
*/
@Override
public void pageClosed(IWorkbenchPage page)
{
if (MessageDialog.openQuestion(page.getWorkbenchWindow().getShell(), "Question", "Do you really want to close the application?"))
{
// YES, then no problem, close
return;
}
else
{
// NO
System.out.println("Now what?");
}
}
@Override
public void pageActivated(IWorkbenchPage page)
{
// method stub
}
});
如果用户说window
,如何停止No
关闭?
或者我怎样才能达到相同的最终结果?
答案 0 :(得分:2)
正如@david所说,IWorkbenchListener
有一个preShutDown
事件,允许通过返回false
来否决整个工作台的关闭。
关闭最后一个工作台窗口或通过 File>等操作关闭工作台退出的
如果您希望阻止关闭单个IWorkbenchWindow
,则需要将 close 侦听器添加到代表工作台窗口的shell中。
例如:
Shell shell = window.getShell();
shell.addListener( SWT.Close, new Listener() {
public void handleEvent( Event event ) {
MessageBox messageBox = new MessageBox( parentShell, SWT.APPLICATION_MODAL | SWT.YES | SWT.NO );
messageBox.setText( "Confirmation" );
messageBox.setMessage( "Close the window?" );
event.doit = messageBox.open() == SWT.YES;
}
} );
将doit
标志设置为false将阻止关闭/丢弃shell。
答案 1 :(得分:1)
警告:我只给了这种技术一个最小的测试,它似乎按预期工作。
从IWorkBenchWindow
获取IWorkbench对象。
将IWorkbenchListener
添加到工作台对象。
侦听器有一个preShutdown
方法,可以让你否决结束。