2014-10-10 50 views
0

在從「OK」按鈕的選擇偵聽器嘗試從SWT對話框中的文本字段訪問字段值時,我收到以下異常。SWT/JFace對話框中的OK按鈕選擇偵聽器中的錯誤

org.eclipse.swt.SWTException: Widget is disposed 

我可以理解這個錯誤是因爲在我試圖訪問它時已經放棄了對話框。但是我沒有做任何明確的調用來處理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

是在單擊確定按鈕時,會自動設置對話框,不,你不應該阻止這一切。

你必須做什麼是覆蓋okPressed並設置對話框之前保存的文本值:

private String fileNameValue; 

.... 

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

    super.okPressed(); 
} 
+0

謝謝..奏效。唯一的問題是,視圖有很多輸入,所有這些都需要在調用'okPressed'方法之前分配給變量。 – 2014-10-10 09:08:17

+0

是的,它可能會變得混亂。您可以使用[JFace數據綁定](http://www.vogella.com/tutorials/EclipseDataBinding/article.html)自動設置類中的字段。 – 2014-10-10 09:10:47

+0

謝謝..我會看看同樣的。 – 2014-10-10 12:33:12

相關問題