JFace Dialog在仍在使用时处理小部件

时间:2015-04-09 11:49:59

标签: java swt jface

我有一个扩展jface.dialogs.Dialog的课程。在该对话框中是一个保存按钮。当用户按下该按钮时,我需要读取某些swt.widgets.Text字段中的值,但文本字段已经处理完毕。

我做错了什么?

public class MyNewDialog extends Dialog {
private Text txt;

public MyNewDialog(Shell parentShell) {
    super(parentShell);
}

@Override
protected Control createDialogArea(Composite parent) {
    Composite container = (Composite) super.createDialogArea(parent);
    container.setLayout(new GridLayout(2, false));

    txt = new Text(container, SWT.BORDER);
    txt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));

    return container
}

@Override
protected void createButtonsForButtonBar(Composite parent) {
    Button saveButton = createButton(parent, IDialogConstants.OK_ID, "Save", true);
    saveButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent p_e) {
            String string = txt.getText() //widget is disposed exception
        }
    }
}

1 个答案:

答案 0 :(得分:3)

由于您使用IDialogConstants.OK_ID作为按钮,因此可以使用okPressed()方法。无需添加特定的侦听器。

@Override
protected void okPressed()
{
    value = txt.getText();

    super.okPressed();
}

然后创建一个getter方法方法来返回value变量:

public String getValue()
{
    return value;
}