我要做的第一件事是覆盖 ApplicationWindow 中的 close() 方法
/** the rc from the message dialog */
int rc = -1;
@Override
public boolean close()
{
MessageDialog messagedialog = new MessageDialog(getShell(),
"Confirm Exit", null, "Are you sure you want to exit?", 4,
new String[]
{ "Yes", "No" }, 1);
messagedialog.setBlockOnOpen(true);
messagedialog.open();
rc = messagedialog.getReturnCode();
/** int to hold the return code from the message dialog */
if (rc == 0)
{
return true;
} else
{
return false;
}
}
我要做的第二件事是监听“X”关闭按钮上的事件
shell.addListener(SWT.Close, new Listener()
{
@Override
public void handleEvent(Event event)
{
switch (rc)
{
case 0: // yes pressed
event.doit = true;
break;
case 1: // no pressed
event.doit = false;
break;
case -1: // escape pressed
break; // do nothing
default:
break;
}
}
});
“event.doit”布尔字段确定外壳的关闭。如果该值等于'true' - “让我们做”,让我们关闭外壳(即rc = 0)。
如果该值等于 1 (rc = 1),则外壳保持打开状态。
如果按下 ESC(即 rc = -1),我们什么也不做。但是,如果这是必需的,我们可以最小化 shell 或基于此事件执行一些其他操作。