Come utilizzare JFace FileDialog da un plug-in Eclipse in modo non modale?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Sto scrivendo un plugin Eclipse, e in risposta ad alcune azioni sono interessante iniziare una serie di operazioni (all'interno di un lavoro separato). Una di queste operazioni è richiedere all'utente di fornire un nome file, che sto cercando di fare con JFia JDialog.

Tuttavia, non sono chiaro come farlo in un modo non modale; per esempio, dove posso ottenere un display e una shell? Come posso garantire che l'interfaccia utente continui a funzionare mentre lo sviluppatore può modificare elementi nella finestra di dialogo?

È stato utile?

Soluzione

Forse potresti vedere come lo fa 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;
}

Gestisce la shell madre in base al focus della finestra di dialogo.

 /**
  * 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 fornisce implementazioni predefinite per i metodi descritti da ShellListener , che fornisce metodi che gestiscono i cambiamenti nello stato di Shell .

Altri suggerimenti

L'importante è che il valore dello stile includa SWT.MODELESS.

Lo stile è una delle cose più importanti in SWT che dovresti prendere in considerazione, perché puoi controllare e inizializzare molto solo grazie al valore dello styel.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top