我在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()方法?
最诚挚的问候。
答案 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();
}