Wie der JFace File-Dialog verwenden innerhalb einer Eclipse-Plugin in einer modalen Art und Weise?

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich schreibe eine Eclipse-Plugin, und als Reaktion auf eine Aktion, die ich bin interessant in eine Reihe von Operationen beginnen (in einem separaten Job). Eine dieser Operationen ist es, den Benutzer aufzufordern, einen Dateinamen zur Verfügung zu stellen, die ich versuche, mit dem JFace JDialog zu tun.

Allerdings bin ich nicht klar, wie diese in einer nicht modalen Art und Weise zu tun; zum Beispiel, wo erhalte ich eine Anzeige und Shell? Wie stelle ich sicher die Benutzeroberfläche weiter zu arbeiten, während die Entwickler Sachen im Dialog bearbeiten können?

War es hilfreich?

Lösung

Vielleicht konnte man sehen, wie Sie Eclipse selbst tut es:

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;
}

Es hat seine übergeordnete Shell verwalten je nach Schwerpunkt des Dialogs.

 /**
  * 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();
     }
 }

ShellAdapter ist bietet Standardimplementierungen für die beschriebenen Methoden durch die ShellListener -Schnittstelle, die Methoden, die mit Veränderungen im Zustand der Shell befassen bietet.

Andere Tipps

Die importent Sache ist, dass der Stil Wert SWT.MODELESS enthalten sollte.

Der Stil ist eines der wichtigsten Dinge in SWT Sie betrachten sollten, weil Sie wegen der styel Wert viel nur steuern und initialisieren kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top