区分消息对话框中的no,close选项之间的行为

时间:2014-01-02 07:42:47

标签: java eclipse dialog jface

我正在使用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按钮中它应该只处理对话框,所以我在这里做错了。

2 个答案:

答案 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

}