SWT / JFace对话框中的OK按钮选择侦听器出错

时间:2014-10-10 04:36:30

标签: java eclipse eclipse-plugin swt jface

我尝试从“确定”按钮的选择侦听器中的SWT对话框中的文本字段访问字段值时收到以下异常。

org.eclipse.swt.SWTException: Widget is disposed

我可以理解错误是因为在我尝试访问时,Dialog已经被处理掉了。但我没有明确要求处置shell。

单击“确定”按钮时,对话框是否自动处理?有什么办法可以覆盖吗?或者我在这里做错了什么?

感谢任何帮助或指示。以下相关代码段:

public class MyDialog extends Dialog {

    /** The file Name Text field. */
    private Text fileNameText;

    /** The constructor. **/
    protected MyDialog(Shell parentShell) {
        super(parentShell);
    }

    /** Create Dialog View. **/
    protected Control createDialogArea(Composite parent) {
        Composite mainComposite = (Composite) super.createDialogArea(parent);

        fileNameText = new Text(mainComposite, SWT.BORDER);
        fileNameText.setText("");
        fileNameText.setBounds(0, 20, 428, 20);

        return mainComposite;
    }

    /** Override method to set name and listener for 'OK' button. **/
    protected void createButtonsForButtonBar(Composite parent) {
        super.createButtonsForButtonBar(parent);

        Button submitButton = getButton(IDialogConstants.OK_ID);
        submitButton.setText("Review");
        setButtonLayoutData(submitButton);

        // Perform Selected CleanUp activity on Submit Click.
        submitButton.addSelectionListener(new SelectionListener() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                // do something.
                if (fileNameText.getText().isEmpty()) {
                        return;
                }
            }

            @Override
            public void widgetDefaultSelected(SelectionEvent e) {
            }
        });
    }
}

1 个答案:

答案 0 :(得分:2)

是单击“确定”按钮时会自动释放对话框,“否”不应该停止此操作。

您必须做的是覆盖okPressed并在处理对话框之前保存文本值:

private String fileNameValue;

....

@Override
protected void okPressed()
{
  fileNameValue = fileNameText.getText();

  super.okPressed();
}