2016-10-13 4 views
1

Ich habe eine Wizard enthält zwei Assistentenseiten (org.eclipse.jface.wizard.WizardPage) und möchte den Fokus für jede Seite separat festlegen, so dass immer das oberste Eingabefeld jeder Seite fokussiert ist.Wo kann der Fokus in den Assistentenseiten festgelegt werden?

Wenn Sie den Fokus auf WizardPage.createControl(Composite) setzen, wird der Fokus der ersten Seite korrekt eingestellt. Die zweite Seite hat keinen Fokus. Dies liegt an Wizard.createPageControls(Composite), die alle Seiten am Anfang erstellt.

Wo würde der Fokus nach dem Wechsel zur nächsten Seite des Assistenten liegen?

Antwort

3

Überschreiben der WizardPagesetVisible Verfahren und den Fokus, wenn die Seite sichtbar wird:

@Override 
public void setVisible(boolean visible) { 
    super.setVisible(visible); 

    if (visible) { 
     // TODO set focus 
    } 
} 
+0

ok, ich verwenden werde. Nur für die Aufzeichnung, stellen Sie sicher, dass 'super.setVisible (visible)' aufgerufen wird, die die Sichtbarkeit des 'control' behandelt. –

+0

Ja, Superaufruf zur Antwort –

1

JFace Assistenten bieten keine bezeichneten Haken um den Fokus einzustellen. Als Greg bereits erwähnt, kann die setVisible() Methode verwendet werden, um den anfänglichen Fokus einer Assistentenseite festzulegen.

Normalerweise sollte der Fokus von Assistentenseiten nur eingestellt werden, wenn die Seite zum ersten Mal angezeigt wird. Wenn ein Benutzer zu einer Seite zurückkehrt, sollte der Fokus dort bleiben, wo er war, als die Seite verlassen wurde.

Deshalb Ich wache in der Regel den Fokus Code, so dass es nur dann ausgeführt wird, wenn die Seite zum ersten Mal gezeigt wird:

private boolean firstTimeShown = true; 

@Override 
public void setVisible(boolean visible) { 
    super.setVisible(visible); 
    if(visible && firstTimeShown) { 
    firstTimeShown = False; 
    control.setFocus(); 
    } 
} 
+0

hinzugefügt Danke Rüdiger. Nur für die Aufzeichnung, stellen Sie sicher, dass 'super.setVisible (visible)' aufgerufen wird, die die Sichtbarkeit des 'control' behandelt. –

+0

Danke für den Hinweis, fügte ich der Antwort den Super-Anruf hinzu. –

Verwandte Themen