¿Cómo usar JFace FileDialog desde un plugin de Eclipse de una manera sin modelo?

StackOverflow https://stackoverflow.com/questions/617707

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy escribiendo un complemento de Eclipse y, en respuesta a alguna acción, me interesa iniciar una serie de operaciones (dentro de un trabajo separado). Una de estas operaciones es solicitar al usuario que proporcione un nombre de archivo, lo que estoy tratando de hacer con JFace JDialog.

Sin embargo, no tengo claro cómo hacerlo de una manera sin modelo; por ejemplo, ¿dónde obtengo una pantalla y un shell? ¿Cómo me aseguro de que la interfaz de usuario continúe funcionando mientras el desarrollador puede editar cosas en el cuadro de diálogo?

¿Fue útil?

Solución

Puede ser que puedas ver cómo lo hace 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;
}

Administra su shell primario dependiendo del enfoque del diálogo.

 /**
  * 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 proporciona implementaciones predeterminadas para los métodos descritos por ShellListener , que proporciona métodos que se ocupan de los cambios en el estado de Shell .

Otros consejos

Lo importante es que el valor del estilo debe incluir SWT.MODELESS.

El estilo es una de las cosas más importantes en SWT que debes observar, porque puedes controlar e inicializar mucho solo por el valor de styel.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top