2010-11-03 14 views
5

Estoy trabajando con Gxt. Necesito establecer el foco en el primer campo habilitado en la página. Pero tengo muchas páginas y quiero centralizar ese comportamiento. Hay una falta de documentación en Gxt, así que me pregunto si alguien ha encontrado un problema así y puede ayudarme.Gxt focus management

Ahora va como que en la clase de cada componente

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

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

tengo encontró com.extjs.gxt.ui.client.aria.FocusManager pero es absolutamente claro cómo lo puedo usar. O tal vez también es posible obtener una cadena de campos a medida que avanzan en el componente de acuerdo con el enfoque. Y puedo mover el método resetFocus a la clase padre.

Smth así

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

¿Quizás nos puede mostrar su código? No hace que las personas quieran ayudar con su problema cuando lo llaman una tarea trivial, lo hace parecer perezoso en la parte de investigación del problema. – Woot4Moo

+0

¡Gracias, tienes razón! Me di cuenta de que mi publicación no me muestra un buen lado. Lo reescribiré. – Zalivaka

+0

reescrito, abierto para la necesidad crítica y llena de ayuda. – Zalivaka

Respuesta

2

Focus después de render cierto retraso Así que hay que utilizar Scheduler.get(). ScheduleDeferred método. O DeferredCommand en gwt 1.7 o antes.

Ejemplo de uso;

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

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

});

+0

No es útil en absoluto. Estaba buscando una solución que pueda implementar una vez y no copie y pegue el código de foco(). He creado mi propio sistema de gestión de foco, por lo que la pregunta ya no es más real. – Zalivaka

+0

¿Por qué no comparte su solución aquí? Tal vez su solución ayudará a otras personas. –

+0

Al menos funcionó para mí. Estaba usando scheduleFinally que no funciona, scheduleDeferred hizo el truco. Solo utilicé SomeTextField.focus(), en GXT 3 parece ser suficiente. – PhiLho

3

Sobre la base de la última respuesta, tengo que esto funcione en una ventana GXT3 de la siguiente manera:

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

esta manera, cuando la ventana se abre, el campo tiene el foco y usted puede comienza a escribir.