2010-11-03 4 views
5

Ich arbeite mit Gxt. Ich muss den Fokus auf das erste aktivierte Feld auf der Seite setzen. Aber ich habe viele Seiten und möchte dieses Verhalten zentralisieren. Es gibt einen Mangel an Dokumentation in Gxt, also frage ich mich, ob jemand solch ein Problem begegnet ist und mir helfen kann.Gxt Fokus Management

Jetzt geht es so, dass in jeder Klasse der Komponente

protected void resetFocus() { 
    combobox.focus(); 
} 

@Override 
public void show() { 
    super.show(); 
    resetFocus(); 
} 

Ich habe gefunden com.extjs.gxt.ui.client.aria.FocusManager aber ist absolut unklar, wie kann ich es verwenden. Oder vielleicht ist es auch möglich, eine Kette von Feldern zu erhalten, wie sie auf der Komponente entsprechend dem Fokus gehen. Und ich kann resetFocus Methode auf die Elternklasse verschieben.

Smth wie das

protected void resetFocus() { 
    *getFocusChain().get(0).focus();* 
} 
+1

Vielleicht können Sie uns Ihren Code zeigen? Es macht nicht Leute wollen mit Ihrem Problem helfen, wenn Sie es eine triviale Aufgabe nennen, es macht Sie faul in der Forschung Teil des Problems. – Woot4Moo

+0

Danke, du hast Recht! Ich erkannte, dass mein Beitrag mich nicht von der besten Seite zeigt. Ich werde es umschreiben. – Zalivaka

+0

umgeschrieben, offen für Kritiker und füllen brauchen Hilfe. – Zalivaka

Antwort

2

Fokus nach einer gewissen Verzögerung machen So haben Sie Scheduler.get() verwenden. ScheduleDeferred Methode. Oder DeferredCommand auf gwt 1.7 oder vorher.

Anwendungsbeispiel;

Scheduler.get().scheduleDeferred(new ScheduledCommand() {

@Override 
public void execute() { 
    widget.focus(); 
    widget.el().focus(); 
    widget.getElement().focus(); 
} 

});

+0

Es ist überhaupt nicht hilfreich. Ich suchte nach einer Lösung, die ich einmal implementieren kann, und kopiere den focus() Code nicht. Ich habe mein eigenes Fokus-Management-System gemacht, daher ist die Frage nicht mehr aktuell. – Zalivaka

+0

Warum teilen Sie Ihre Lösung nicht hier? Vielleicht hilft Ihre Lösung anderen Menschen. –

+0

Zumindest hat es für mich funktioniert. Ich habe scheduleFinally verwendet, was nicht funktioniert, planedDeferred hat den Trick gemacht. Ich habe nur einigeTextField.focus() verwendet, in GXT 3 scheint es genug zu sein. – PhiLho

3

auf der letzten Antwort Basierend, ich habe diese, indem Sie folgende in einem GXT3 Fenster zu arbeiten:

@Override 
public void show() { 
    super.show(); 
    Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { 
     @Override 
     public void execute() { 
      field.focus(); 
     } 
    }); 
} 

diese Weise, wenn das Fenster geöffnet ist, hat das Feld den Fokus und Sie können beginne zu tippen.