有没有办法阻止 IWorkbenchWindow 关闭?
Is there a way to prevent an IWorkbenchWindow from closing?
所以我有我的 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
}
});
如果用户说 No
,我如何阻止 window
关闭?
或者我怎样才能达到相同的最终结果?
警告:我只对这项技术进行了最低限度的测试,它似乎按预期工作。
从 IWorkBenchWindow
获取一个 IWorkbench 对象。
将 IWorkbenchListener
添加到 workbench 对象。
侦听器有一个 preShutdown
方法,应该允许您否决关闭。
正如@david 所说,IWorkbenchListener
有一个 preShutDown
事件,允许通过返回 false
来否决整个 workbench 的关闭。
当最后一个 workbench window 关闭时或通过 File > Exit.[= 等操作关闭 workbench 16=]
如果你想阻止单个 IWorkbenchWindow
被关闭,你需要添加一个 close 监听器到代表 workbench window.
例如:
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 成为 closed/disposed。
所以我有我的 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
}
});
如果用户说 No
,我如何阻止 window
关闭?
或者我怎样才能达到相同的最终结果?
警告:我只对这项技术进行了最低限度的测试,它似乎按预期工作。
从 IWorkBenchWindow
获取一个 IWorkbench 对象。
将 IWorkbenchListener
添加到 workbench 对象。
侦听器有一个 preShutdown
方法,应该允许您否决关闭。
正如@david 所说,IWorkbenchListener
有一个 preShutDown
事件,允许通过返回 false
来否决整个 workbench 的关闭。
当最后一个 workbench window 关闭时或通过 File > Exit.[= 等操作关闭 workbench 16=]
如果你想阻止单个 IWorkbenchWindow
被关闭,你需要添加一个 close 监听器到代表 workbench window.
例如:
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 成为 closed/disposed。