Domanda

Ora che ho sono in grado di impostare il contenuto della pagina a seconda mia seconda del mago sulla prima pagina selezione, Cerco un modo per dare l'attenzione al contenuto mia seconda della pagina quando l'utente fa clic sul pulsante Avanti sulla prima pagina.

Per impostazione predefinita, quando l'utente clicca sul pulsante accanto, l'attenzione è data al pulsante composito (Avanti, Indietro o il tasto finitura a seconda della configurazione wizard)

L'unico modo che ho trovato per dare attenzione al contenuto del mio pagina è la seguente:

public class FilterWizardDialog extends WizardDialog {

    public FilterWizardDialog(Shell parentShell, IWizard newWizard) {
        super(parentShell, newWizard);
    }

    @Override
    protected void nextPressed() {
        super.nextPressed();
        getContents().setFocus();
    }
}

Per me è un po ' "noioso e pesante" di dover sostituire la classe WizardDialog al fine di attuare questo comportamento. Più sopra, il javadoc WizardDialog dice:

  

I clienti possono creare una sottoclasse WizardDialog, anche se questo è raramente necessaria.

Che ne pensate di questa soluzione? C'è qualche soluzione più semplice e più pulito per fare questo lavoro?

È stato utile?

Soluzione

suggerisce:

  

Nella pagina della procedura guidata, utilizzare il metodo setVisible() ereditaria che viene chiamato automaticamente prima viene mostrata la tua pagina:

public void setVisible(boolean visible) {
   super.setVisible(visible);
   // Set the initial field focus
   if (visible) {
      field.postSetFocusOnDialogField(getShell().getDisplay());
   }
}

Il metodo postSetFocusOnDialogField contiene:

/**
 * Posts <code>setFocus</code> to the display event queue.
 */
public void postSetFocusOnDialogField(Display display) {
    if (display != null) {
        display.asyncExec(
            new Runnable() {
                public void run() {
                    setFocus();
                }
            }
        );
    }
}

Altri suggerimenti

La risposta di VonC grandi opere, personalmente ho trovato ad essere un po 'più facile lavorare con come questo però:

@Override
public void setVisible(boolean visible) {
    super.setVisible(visible);
    if (visible) {
        Control control = getControl();
        if (!control.setFocus()) {
            postSetFocus(control);
        }
    }
}

private void postSetFocus(final Control control) {
    Display display = control.getDisplay();
    if (display != null) {
        display.asyncExec(new Runnable() {
            @Override
            public void run() {
                control.setFocus();
            }
        });
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top