我正在使用MessageDialog类
的打开对话框boolean confirm = MessageDialog.open(MessageDialog.QUESTION_WITH_CANCEL,new Shell(),
"Save Project" has been modified.Save changes?", SWT.NONE)
在yes上返回true,否则返回false。它在我的最后做了一件事,当我取消并点击交叉行为时它也返回false并且因为没有选项(我已经写了一些关于false的步骤)而关闭了。在cacel和cross按钮中它应该只处理对话框,所以我在这里做错了。
答案 0 :(得分:2)
要区分来自QUESTION_WITH_CANCEL
的3响应,您必须使用MessageDialog
的构造函数形式而不是静态方法之一:
MessageDialog dialog
= new MessageDialog(shell, "title", null, "message", MessageDialog.QUESTION_WITH_CANCEL,
new String [] {IDialogConstants.YES_LABEL,
IDialogConstants.NO_LABEL,
IDialogConstants.CANCEL_LABEL}.
SWT.NONE);
int response = dialog.open();
response
为0表示是,1表示否,2表示取消。
答案 1 :(得分:1)
您解释的行为是正确的。正如您在MessageDialog JavaDoc中看到的那样,它指定open方法将为OK返回“true”,在所有其他情况下返回false。
如果你需要取消和关闭之间的不同行为,我建议你先创建MessageDialog,然后使用open()方法。这将返回与用户按下以关闭此对话框的按钮相关的int,或者如果通过其他方式(ESC键,关闭框等)关闭则返回SWT.DEFAULT(-1)。
您的代码将是这样的(注意,我没有机会对此进行测试):
MessageDialog dialog = new MessageDialog(new Shell(), "Save Project", null, "Project has be modified. Save Changes?", MessageDialog.QUESTION_WITH_CANCEL, new String[]{IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL}, 0);
int confirm = dialog.open();
if (confirm == SWT.DEFAULT) { // ESC or other close action happened
} else if (confirm == SWT.YES) { // Yes pressed
} else if (confirm == SWT.NO) { // No Pressed
} else if (confirm == SWT.CANCEL) { // Cancel Pressed
}