Как использовать JFace FileDialog из плагина Eclipse немодальным способом? - PullRequest
2 голосов
/ 06 марта 2009

Я пишу плагин Eclipse, и в ответ на какое-то действие мне интересно начать серию операций (в рамках отдельной работы). Одна из этих операций - запросить у пользователя имя файла, что я пытаюсь сделать с JFial JDaceog.

Однако мне не ясно, как это сделать немодальным способом; например, где взять дисплей и оболочку? Как я могу гарантировать, что пользовательский интерфейс продолжает работать, пока разработчик может редактировать материал в диалоговом окне?

Ответы [ 2 ]

4 голосов
/ 06 марта 2009

Может быть, вы увидите, как это делает само Eclipse:

FindAndReplaceDialog.java

 /**
  * Creates a new dialog with the given shell as parent.
  * @param parentShell the parent shell
  */
 public FindReplaceDialog(Shell parentShell) {
     super(parentShell);

     fParentShell= null;

     [...]

     readConfiguration();

     setShellStyle(SWT.CLOSE | SWT.MODELESS | SWT.BORDER | SWT.TITLE | SWT.RESIZE);
     setBlockOnOpen(false);
 }

 /**
  * Returns this dialog's parent shell.
  * @return the dialog's parent shell
  */
 public Shell getParentShell() {
     return super.getParentShell();
 }

/**
 * Sets the parent shell of this dialog to be the given shell.
 *
 * @param shell the new parent shell
 */
public void setParentShell(Shell shell) {
    if (shell != fParentShell) {

        if (fParentShell != null)
            fParentShell.removeShellListener(fActivationListener);

        fParentShell= shell;
        fParentShell.addShellListener(fActivationListener);
    }

    fActiveShell= shell;
}

Он управляет своей родительской оболочкой в ​​зависимости от фокуса диалога.

 /**
  * Updates the find replace dialog on activation changes.
  */
 class ActivationListener extends ShellAdapter {
     /*
      * @see ShellListener#shellActivated(ShellEvent)
      */
     public void shellActivated(ShellEvent e) {
         fActiveShell= (Shell)e.widget;
         updateButtonState();

         if (fGiveFocusToFindField && getShell() == fActiveShell && 
               okToUse(fFindField))
             fFindField.setFocus();

     }

     /*
      * @see ShellListener#shellDeactivated(ShellEvent)
      */
     public void shellDeactivated(ShellEvent e) {
         fGiveFocusToFindField= false;

         storeSettings();

         [...]

         fActiveShell= null;
         updateButtonState();
     }
 }

A ShellAdapter обеспечивает реализации по умолчанию для методов, описанных интерфейсом ShellListener, который предоставляет методы иметь дело с изменениями в состоянии Shell.

0 голосов
/ 06 марта 2009

Важно то, что значение стиля должно включать SWT.MODELESS.

Стиль - это одна из самых важных вещей в SWT, на которую вы должны обратить внимание, потому что вы можете контролировать и инициализировать многое только благодаря значению стиля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...