Jface Dialog,如何正确检索按下用户的按钮?

时间:2014-09-16 16:33:53

标签: java eclipse jface rcp

我在Eclipse中使用自定义Dialog时遇到了麻烦。

首先,我创建了一个扩展Dialog的类。

    public class ModificarGrupoBCDialog extends Dialog {

    private static final int CANCELAR = 999;
    private static final int MODIFICAR = 1;
    ...

某处我创建按钮......

    protected void createButtonsForButtonBar(Composite parent) {
    this.createButton(parent, MODIFICAR, "Modificar", true);
    this.getButton(MODIFICAR).setEnabled(puedeAltaGrupoBC());
    this.bt_ok = this.getButton(MODIFICAR);

    this.createButton(parent, CANCELAR, "Cancelar", false);

    Display display = window.getShell().getDisplay();
    Image image = new Image(display, ModificarGrupoBCDialog.class.getResourceAsStream("/icons/modificar.png"));
    this.getButton(MODIFICAR).setImage(image);
    image = new Image(display, ModificarGrupoBCDialog.class.getResourceAsStream("/icons/cancelar.png"));
    this.getButton(CANCELAR).setImage(image);

}

当用户点击...

    protected void buttonPressed(int buttonId) {
    switch (buttonId) {
    case MODIFICAR:
                // Some Code, for Change Button

        break;
    case CANCELAR:
        setReturnCode(CANCELAR);
        close();
        break;
    }

最后,这是我在调用者对象中打开并获取returnCode的方式。

            ...
            ModificarGrupoBCDialog modificarGrupoBC = new ModificarGrupoBCDialog(window.getShell(), window, gr_bc);
            if (modificarGrupoBC.getReturnCode() == Window.OK) {
                  //... Some code on OK
            } else {
                //another code when cancel pressed.
            }
            ;

正如你所看到的,经过一段时间的努力,我必须在CANCELAR交换机块中编写setReturnCode(),那可以吗? 我认为Dialog类会自动设置正确的返回码。

可能有人可以给我一个很好的样本。

我正在阅读Vogela的博客,可能解决方法是覆盖okPressed()方法?

最诚挚的问候。

1 个答案:

答案 0 :(得分:3)

标准对话框在两个位置设置返回码:

protected void okPressed() {
    setReturnCode(OK);
    close();
}

protected void cancelPressed() {
    setReturnCode(CANCEL);
    close();
}

所以你的代码在做:

setReturnCode(xxxx);
close();
只要您使用的按钮ID与“取消”或“确定”按钮ID不匹配,

就应该没问题。

你也可以使用MessageDialog使用的方法,它只是这样做:

protected void buttonPressed(int buttonId) {
    setReturnCode(buttonId);
    close();
}